lua通用for循环规范

时间:2015-12-09 22:52:32

标签: generics for-loop lua

我正在使用Lua 5.0,令我困惑的是以下代码的工作原理:

for i in {first=1,second=2,third=3} do
    print(i)
end

它首先打印'第二'第二'第三'。但是,根据Lua for 5.0的在线编程 " for的第一件事就是在in之后计算表达式。这些表达式应该导致for保存的三个值:迭代器函数,不变状态和控制变量的初始值。 #34;

在这种情况下,in之后的表达式只是一个表。它不会评估(函数,状态,初始值),任何后续调用都将调用表本身。但上面的例子有效,为什么?

2 个答案:

答案 0 :(得分:1)

上述for循环对4.0版有效,请参阅http://www.lua.org/manual/4.0/manual.html#4.4

这样的for语句
   for index, value in exp do block end

等同于代码:

   do
     local _t = exp
     local index, value = next(t, nil)
     while index do
       block
       index, value = next(t, index)
     end
   end

如图所示,“in”之后的“exp”可以是一个表格。这与5.0及以后的for语法截然不同。但是,我的实验表明5.0仍然尊重这种旧式。这解释了我所看到的。

答案 1 :(得分:0)

在Lua 5.2(标准)中,此代码产生错误

Runtime Error:
tst.lua:1: attempt to call a table value

所以我不知道你在做什么,但不管怎样,你所做的是错误