HKT*_*Lee 4 lua functional-programming
这些myFuncs 之间有什么区别?
代码1
function wrapper()
local someVariable = 0;
function myFunc(n)
if n > 0 then return myFunc(n-1) end
end
return myFunc;
end
Run Code Online (Sandbox Code Playgroud)
代码2
function wrapper()
local someVariable = 0;
local myFunc = function(n)
if n > 0 then return myFunc(n-1) end
end
return myFunc;
end
Run Code Online (Sandbox Code Playgroud)
代码3
function wrapper()
local someVariable = 0;
local myFunc;
myFunc = function(n)
if n > 0 then return myFunc(n-1) end
end;
return myFunc;
end
Run Code Online (Sandbox Code Playgroud)
因为当我myFunc在myFunc自己内部引用函数名称时.他们的行为不一样.(例如,upvalue someVariable......有问题:-S)
[编辑:我误读了你的代码#2.]
代码#1设置myFunc函数的全局值.因此,每次打电话wrapper,您都会将此全局设置为新值.此外,对您的myFunc调用的任何引用都将是对此全局(可修改),而不是对本地(这将是关闭的高价值).
代码#2设置局部变量myFunc.但是,由于Lua的规则,该局部变量仅在定义它的语句完成后才进入范围.这允许你做这样的事情:
local x = x or 5
Run Code Online (Sandbox Code Playgroud)
该x表达式是先前声明的局部或全局.x在x or 5表达式被评估之后,新的才进入范围.
您的功能定义也是如此.因此,任何引用都myFunc将是全局变量,而不是本地变量.
代码#3创建一个局部变量myFunc.然后它将该变量设置为一个函数.因为函数是在局部变量进入范围之后创建的myFunc,所以函数中的引用将引用局部变量,而不是全局变量.
注意local function X相当于local X; X = function....不给local X = function....