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
会返回一个函数,然后调用该函数会返回数字。