Lua函数需要分配到变量

我最近一直在尝试学习一些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()

有人可以澄清这是为什么吗?

点赞
用户3574628
用户3574628

首先,函数只是值。你的外部函数被分配给变量iter,该函数返回一个匿名函数。(“匿名”意味着在返回函数之前你没有给它命名。)

其次,带括号的参数列表基本上是调用一个函数的运算符(除非它在函数声明中)。当你使用该运算符时,函数会运行,表达式的结果为返回值。

在语句iter()中,你调用一个函数并忽略它的返回值,因此你永远不会看到内部函数运行。

在语句it = iter()中,你最终获得了一个名为it的命名函数。每次你调用它时,它会递增iter调用内部的i变量。

顺便说一下,你可以合法地使用iter()()来立即调用返回的函数。在你的情况下,这实际上并不有用,因为每次调用iter都会返回一个起始值为零的新的闭包。

2018-05-29 21:10:11