gpt4 book ai didi

functional-programming - 命名函数和匿名函数(Lua)之间的区别

转载 作者:行者123 更新时间:2023-12-04 23:56:16 26 4
gpt4 key购买 nike

这些有什么区别myFunc ?

代码 1

function wrapper()
local someVariable = 0;
function myFunc(n)
if n > 0 then return myFunc(n-1) end
end
return myFunc;
end

代码 2
function wrapper()
local someVariable = 0;
local myFunc = function(n)
if n > 0 then return myFunc(n-1) end
end
return myFunc;
end

代码 3
function wrapper()
local someVariable = 0;
local myFunc;
myFunc = function(n)
if n > 0 then return myFunc(n-1) end
end;
return myFunc;
end

因为当我引用函数名称时 myFuncmyFunc本身。他们的行为并不相同。 (例如,上值 someVariable ...有问题的 :-S )

最佳答案

[编辑:我误读了您的代码#2。]

代码 #1 设置了 myFunc 的全局值到函数。所以每次你打电话wrapper ,您将把这个全局设置为一个新值。此外,对您的 myFunc 的任何引用调用将是对这个全局的(它是可修改的),而不是一个局部的(这将是闭包的一个 upvalue)。

代码#2 设置了一个局部变量 myFunc . 然而 , 因为 Lua 的规则,局部变量只有在定义它的语句完成后才进入作用域。这允许您执行以下操作:

local x = x or 5
x在表达式中是先前声明的局部或全局。新款 x直到 x or 5 之后才进入范围表达式已被评估。

您的函数定义也是如此。因此,对 myFunc 的任何引用将是全局变量,而不是局部变量。

代码#3 创建一个局部变量 myFunc .然后它在该变量中设置一个函数。因为函数是在局部变量进入作用域后创建的,所以引用 myFunc在函数中将引用局部变量,而不是全局变量。

请注意 local function X相当于 local X; X = function... . 不是 local X = function... .

关于functional-programming - 命名函数和匿名函数(Lua)之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15862957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com