【问题标题】:Lua function needs to be assigned to variableLua函数需要赋值给变量
【发布时间】:2018-11-08 12:38:36
【问题描述】:

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

谁能澄清这是为什么?

【问题讨论】:

  • 欢迎来到 SO!您的代码确实有效(此外,对于未来,请记住始终澄清“不工作”的含义)。它只返回执行增量的函数。您可能会受益于lua.org/pil/6.1.html
  • 哦,谢谢,我看看那个。这也是我第一次来这里,所以下次一定要更具体:)

标签: function variables lua


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 非常感谢!回答了我的问题,我学到了更多关于函数的知识:)
猜你喜欢
  • 2016-09-15
  • 2011-03-12
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多