所以我最近一直试图学习一些lua,而且我遇到了一些我今天对功能无法理解的东西,下面的代码没有工作
function iter()
local i=0
return function() print(i); i=i+1; end
end
iter()
iter()
我必须将变量设置为我的函数iter(),然后在变量运行之前调用该变量:
function iter()
local i=0
return function() print(i); i=i+1; end
end
it=iter()
it()
it()
任何人都可以澄清为什么会这样吗?
答案 0 :(得分:2)
首先,功能只是价值。您的外部函数已分配给变量iter
。该函数返回一个匿名函数。 (“匿名”只是意味着你在返回之前没有给该函数命名。)
其次,括号中的参数列表基本上是一个调用函数的运算符(除非它在函数声明中)。使用该运算符时,函数将运行,表达式将返回返回值。
在语句iter()
中,你调用一个函数并忽略它的返回值,所以你永远不会看到内部函数运行。
在语句it = iter()
中,您最终得到一个名为it
的命名函数。每次调用它时,它会从创建它的i
调用内增加iter
变量。
作为旁注,说iter()()
立即调用返回的函数是合法的。这在您的情况下实际上没有用,因为每次调用iter
都会返回一个从{0}开始的新闭包。