私は時にはお互いを呼び出す2つの関数を持っており、それらを使って別の関数を構築するモジュールにローカルです。モジュールは、コードのこの部分に多少似ています互いに呼び出すローカル関数
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
私はエラーattempt to call global 'isodd' (a nil value)
を取得し、別のファイルからevenOrOdd
を呼び出すときに問題があります。
iseven
をグローバルに設定した場合、これは起こりませんが、モジュールに対してローカルにしておきたいと思いました。
iseven
が宣言されている行の前にダミー関数宣言(local function isodd() end
)を置くことさえ試みました。私もダミー関数宣言の代わりにlocal isodd
を挿入しようとしましたが、どちらの方法でもうまく動作せず、さまざまな種類のエラーが発生します。
私はLuaはクロージャを持っているとiseven
が宣言されたとき、それはnil
またはダミー関数のいずれかである、isodd
の実際の値をキャッチし、後にそれを修正することはカウントされませんが、回避する方法があるので、これは知っていますこの? num%2
ため
Luaでの前方宣言の例: 'ローカルf;ローカル関数g()return f()end;関数f()return g()end' –
@Egor Skriptunoffああ。私がその質問で言ったように、私はそれを試しました。しかし、 'function isodd(n)'の前に 'local'を削除するのを忘れてしまったようで、' upvalue 'isodd(nil value) 'エラーを呼び出そうとしました。ありがとう。 – user6245072
あなたが指定したコードのエラーメッセージは '試みるべきglobal 'isodd(nil value)'でなければなりません。 – lhf