Generic for メモ

微妙にブラックボックスなfor in文がだいたいわかったのでメモ。
詳しくはProgramming in Lua 7章。

for k, v in pairs(t) do
  print(k, v)
end

-- for 代入する変数 in interator関数, 不変状態, 制御変数初期値
-- , nilは通常省略
-- 代入される変数にはiterator関数の2つめ以降の返り値が代入される。
-- ひとつめの返り値は制御変数。
for k, v in next, t, nil do
  print(k, v)
end

と等価。さらにこれは多分

do
  -- 制御変数
  local cond
  while true do
    local k, v
    -- iterator関数を実行して制御変数の更新と値の代入
    cond, k, v=next(t, cond)
    if not cond then
      break
    end

    print(k, v)
  end
end

とほぼ等価(だと思う)。