忘记在函数名中加入(),但它并没有给出错误,却给出了一个新值。任何解释?

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 不是函数名,而是一个被分配给函数的变量。为什么我们需要在函数名中加括号才能使return工作呢?有任何解释吗?而且我不能通过返回什么来获得函数的“代码”(如果我尝试打印函数返回了什么,它会什么都不显示)。

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

print(Closures())--这个 和
print(Closures)

我将获得一些奇怪的函数“代码”:

function: 0077fa8

function 0048bc30

P.S.: 这个语法错误意外地与问题一起出现。

点赞
用户4984564
用户4984564

函数是值

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

假设我们有一个名为 func 的函数,代码如下:

local func = function() return "REEEEE" end

我们可以将这个函数赋值给一个新的变量,代码如下:

local func2 = func

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

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

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

bruh = Closures
print(bruh()())

这应该打印出 1,因为调用 bruh 返回一个函数,再调用它将返回该数字。

2020-08-03 12:32:56