首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >忘记将()放入函数的名称中,但它没有给出错误,而是给了我一个新的值。有什么解释吗?

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

Stack Overflow用户
提问于 2020-08-03 11:33:13
回答 1查看 45关注 0票数 1
代码语言:javascript
复制
function Closures()
   local b = 0
   return function() 
      b = b + 1 
      return b 
   end 
end 

bruh = Closures 
print(bruh())

我展示的函数有一个问题:变量布鲁赫分配给Closures (我忘了把()和变量名放在一起)。它没有给出一个错误,而是给了我一个不同的结果。

function: 0056b7f0

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

1

我知道,Closures不是函数名,而是分配给函数的变量。为什么我们需要()来使返回工作?有什么解释吗?如果不返回任何内容,我就无法真正得到函数“代码”(如果我试图打印一个不返回的函数,它就什么都不会显示)。

编辑:我刚刚知道如果我这么做了

代码语言:javascript
复制
print(Closures())--This and 
print(Closures)

我会得到一些奇怪的函数“代码”:

函数: 0077fa8函数0048bc30

P.S.:这个语法错误是意外地伴随着这个问题而来的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-03 12:32:56

函数是值

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

假设我们有一个像这样的函数func

代码语言:javascript
复制
local func = function() return "REEEEE" end

我们可以将这个函数赋值给这样一个新变量

代码语言:javascript
复制
local func2 = func

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

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

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

代码语言:javascript
复制
bruh = Closures 
print(bruh()())

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63228667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档