我正在使用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之后的表达式只是一个表。它不会评估(函数,状态,初始值),任何后续调用都将调用表本身。但上面的例子有效,为什么?
答案 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
所以我不知道你在做什么,但不管怎样,你所做的是错误。