不多说,看图。
注意这个语句“var = var_1”
下面给出代码实例
local x = 7
local y = 666
local function fun1(e,c)
print('入参后,变化前',e,c)
e = e + c
c = c + 1
print('变化后,分支前',e,c)
if c < 700 then
return e,c
else
return nil,nil
end
end
for k,v in fun1,x,y do
print('完成fun1函数,运算循环体内函数',k,v)
end
当for循环开始运行后,x、y传入迭代器(当x、y都不是引用数据类型时,在循环体内改变x、y的值并不会影响循环次数,见附录),在之后的循环中,x、y不再起作用(虽然和lua手册中给出的等价代码出入有点大,但是事实上,实践证明在循环体内改变x、y的值的确不会导致输出变化,我猜测实际上迭代器为x生成了一个闭包),lua将迭代器返回的第一个值赋给k,同时也赋给它本身作为下一次运行时的参数——因为在循环体中改变k的值并不会导致下一次循环输出的值改变,所以我猜测并不是k作为入参,而是它的“缔造者”——返回值作为入参。
菜鸟教程:
注意,对于 for 结构来说,状态常量没有用处,仅仅在初始化时获取他的值并传递给迭代函数
【附录】
t = {1,2,3,4,5,6,7,8,9,0}
it ,t1,t2= ipairs(t)
for k,v in it ,t1,t2 do
table.insert(t,10+k)
print(k,v)
end
这真的会无限循环下去