テーブルの中身を全部ぶちまける構文
Lua を使ってみようより。
local t = {apples="林檎", banana="バナナ", grapes="グレープ"}
こういうテーブルtがあったとして、その中身を全部出すには。
その1:基本
for k, v in pairs(t) do hoge(k, v) end
forとpairsを使ったごく普通のやり方。
その2:応用
k, v = next(t) while k do hoge(k, v); k, v = next(t, k) end
書き換え。nextを使う利点は、たとえばテキストを改行で区切ってテーブルにした物で、複数の行でひとつのデータを構成する場合などにいけると思う。
カードゲームのカードリストのテキストがあったとして、これが、カード毎の区切りが連続する改行二つだったとすると、分割が容易になる。
その3:リファレンス外
function output(k, v) (something) end table.foreach(t, output)
table.foreachの第一引数にはテーブルを、第二引数には関数を渡す。
これは下記とほぼ等しい。(ほぼなのは、検証をしていないから)
function output(k, v) (something) end for k, v in pairs(t) do output(k, v) end
ただし、http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.htmlには、
関数 table.foreach および table.foreachi は廃止された。ループには代わりに pairs または ipairs を使う。
とある。実際要らないと言えば要らない……。
後方互換性のために実際にはまだ使えるのか、NSLuaで使われているLuaのバージョンがアレなのか。