function values (t)
local i=0
return function ()
i=i+1
return t[i]
end
end
t = {10,20,30}
for element in values(t) do
print(element)
end
for element in values(t) do
print(element)
end
このように2回繰り返しても、t = {10,20,30}
vt = values(t)
for element in vt do
print(element)
end
for element in vt do
print(element)
end
for i, v in func(a) endなどとした場合、
forは''イタレータを繰り返す道具として、ただ一度「func, a, 制御値(iへの初期値)」を要求し、
func(a, 制御値)を繰り返す。''
例えば、ipairsを以下のように実装した時、function ipairs (a) return iter, a, 0 endとリストを返すようにしておけば、
最初に、for ... in は iter(a, 0)を呼び出す。
そして、iter(a, 1)、iter(a, 2)と順に繰り返してゆく。