首页 > 解决方案 > 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()

谁能澄清这是为什么?

标签: functionvariableslua

解决方案


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

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

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

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

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


推荐阅读