2013-06-27 9 views

答えて

7

機能が再帰的である場合は、違いが発生します。最初のケースでは、関数名が関数本体のスコープ内にまだありません。したがって、再帰呼び出しは、ローカル変数を定義する前にスコープ内にあった "myFunction"のバージョンを実際に参照します(ほとんどの場合、空のグローバル変数)。

local myFunction 
myFunction = function() 
    -- ... 
end 

Predeclaring変数ものペアを定義する唯一の方法であることを起こる:

fac = "oldvalue" 
local fac = function() 
    print(fac) --prints a string 
end 

ことはあなたが行うことができます一つのことは、変数を先行宣言され、割り当てパターンで再帰関数を記述できるようにするには相互再帰ローカル機能:

3
local even, odd  
even = function(n) if n == 0 then return true else return odd(n-1) end end 
odd = function(n) if n == 0 then return false else return even(n-1) end end 

違いはaccording to the manualその:

local function f() body end 

local f = function() body end 

local f; f = function() body end 

ないに変換文では(これは関数の本体をfへの参照が含ま違いになります。)

主な理由は、変数のスコープがローカルステートメントの後に開始され、関数が再帰的であれば、それ自体は参照されず、以前のローカルまたはグローバルというfという名前が付けられます。

関連する問題