Lua函数需要与变量一致

时间:2018-05-29 19:16:29

标签: function variables 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()

任何人都可以澄清为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

在语句it = iter()中,您最终得到一个名为it的命名函数。每次调用它时,它会从创建它的i调用内增加iter变量。

作为旁注,说iter()()立即调用返回的函数是合法的。这在您的情况下实际上没有用,因为每次调用iter都会返回一个从{0}开始的新闭包。