가끔씩 서로를 호출하는 두 개의 함수가 있으며 다른 함수를 빌드하는 데 사용하는 모듈의 로컬 함수입니다. 이 모듈은이 코드 조각 다소 유사하다 : 나는 오류 attempt to call global 'isodd' (a nil value)
을 얻을 다른 파일에서 evenOrOdd
를 호출 할 때서로를 호출하는 로컬 함수
local function iseven(n)
if n == 1 then
return false
else
return isodd(n - 1)
end
end
local function isodd(n)
if n == 1 then
return true
else
return iseven(n - 1)
end
end
local evenOrOdd = function(n)
return iseven(n) and "Even" or "Odd"
end
return evenOrOdd
문제가있다.
iseven
을 전역으로 설정하면 이러한 일이 발생하지 않는 것으로 나타 났지만 모듈에 로컬로 보관하고 싶습니다.
iseven
이 선언 된 줄 앞에 더미 함수 선언 (local function isodd() end
)을 넣기까지했습니다. 또한 더미 함수 선언 자리에 그냥 local isodd
삽입 시도했지만 두 가지 방법으로 작동하지 않으며 다른 종류의 오류가 발생합니다.
I 루아 클로저가 있고 iseven
선언되면 그것이 후 계산하지 않고 수정하거나 nil
또는 더미 함수이다 isodd
의 실제 값을 포착하고 있지만,이 바이 패스 할 수있는 방법이기 때문이다 알 이? num%2
에 대한
루아에서 앞쪽 선언의 예 :'local f; 지역 함수 g() return f() end; function f() return g() end' –
@Egor Skriptunoff 아 맞다. 내가 그 질문에서 말했듯이, 나는 그것을 시도했다. 하지만'function isodd (n)'전에'local'을 삭제하는 것을 잊어 버렸고'upvalue 'isodd (nil value) 오류를 호출하려고했습니다. 감사. – user6245072
당신이 준 코드에 대한 에러 메시지는'시도하려고했음을 글로벌 'isodd (nil 값)'로해야합니다. – lhf