function Closures()
local b = 0
return function()
b = b + 1
return b
end
end
bruh = Closures
print(bruh())我展示的函数有一个问题:变量布鲁赫分配给Closures (我忘了把()和变量名放在一起)。它没有给出一个错误,而是给了我一个不同的结果。
function: 0056b7f0
如果我将()添加到变量名(Closures)中,我将得到我想要的结果
1
我知道,Closures不是函数名,而是分配给函数的变量。为什么我们需要()来使返回工作?有什么解释吗?如果不返回任何内容,我就无法真正得到函数“代码”(如果我试图打印一个不返回的函数,它就什么都不会显示)。
编辑:我刚刚知道如果我这么做了
print(Closures())--This and
print(Closures)我会得到一些奇怪的函数“代码”:
函数: 0077fa8函数0048bc30
P.S.:这个语法错误是意外地伴随着这个问题而来的。
发布于 2020-08-03 12:32:56
函数是值
我将用一个简单的例子来解释:
假设我们有一个像这样的函数func:
local func = function() return "REEEEE" end我们可以将这个函数赋值给这样一个新变量
local func2 = func现在,func2将引用与func相同的函数,因此我们可以调用func2(),它将返回"REEEEE“。
当您调用print(Closures)时,您不是在执行Closures,您只是将函数本身传递给print,因此它对函数调用tostring并将结果写入stdout。
当您将Closures分配给bruh时,这意味着btuh现在拥有与Closures相同的函数,调用它将返回内部函数。但请尝试以下几点:
bruh = Closures
print(bruh()())它应该打印1,因为调用bruh将返回一个函数,然后调用该函数返回数字。
https://stackoverflow.com/questions/63228667
复制相似问题