忘记在函数名称中输入 (),但它没有给出错误,而是给了我一个新值。有什么解释吗?


function Closures()
local b = 0
return function() 
b = b + 1 
return b 
end 
end 
bruh = Closures 
print(bruh())

我展示的函数有一个问题:变量bruh分配到Closures中(我忘了用变量名放(((。它没有给出错误,而是给了我一个不同的结果。

function: 0056b7f0

如果我在变量名(Closures(中添加((,我会得到我想要的结果

1

正如我所知,Closures不是函数名,而是分配给函数的变量。为什么我们需要((才能使返回工作?有什么解释吗?我真的不能得到函数";代码事物";通过什么都不返回(如果我尝试打印一个函数,它将什么都不显示(。

编辑:我刚刚发现如果我做

print(Closures())--This and 
print(Closures)

我会得到一些奇怪的函数";代码":

函数:0077fa8

函数0048bc30

p.S.:这个语法错误是与问题一起意外出现的。

函数是值

我将用一个更简单的例子来解释:

假设我们有一个类似func的函数:

local func = function() return "REEEEE" end

我们可以将这个函数分配给像这样的新变量

local func2 = func

现在func2将是对与func相同的函数的引用,所以我们可以调用func2(),它将返回"0";REEEEE";。

当您调用print(Closures)时,您不是在执行Closures,您只是将函数本身传递给print,因此它在函数上调用tostring,并将结果写入stdout。

当您将Closures分配给bruh时,这意味着btuh现在拥有与Closures相同的函数,调用它将返回内部函数。但请尝试以下操作:

bruh = Closures 
print(bruh()())

这应该打印1,因为调用bruh会返回一个函数,然后调用该函数会返回数字。

最新更新