Luaの配列展開
2009 年 6 月 2 日
前回call_user_func関数の実装を行いました。
かなり便利になったのですが、すぐに1点の曇りが見つかりました。
そう、call_user_funcの場合、引数は直接指定しないといけないのです。
この手の関数を使う場面では、引数もあらかじめ配列に格納しておき、呼び出すことが多いのです。
例えば、以下のような関数が定義されていたとします。
function funcA(a,b,c)
print(a,b,c)
end
これを普通に呼び出すのは簡単
funcA("a", "b", "c")
実行結果
a b c
しかし、とあるケースではこの引数を配列にしておきたいときがあります。
args = {"a", "b", "c"}
さて、funcAをどう呼び出すのか?
funcA(args) 実行結果 table: 0x806f168 nil nil
当然ですが、第1引数にテーブルの参照が渡っているのです。
お察しのよろしい方は、タイトルでピンとくるでしょう。
そう、unpack関数があるのです。
funcA(unpack(args)) 実行結果 a b c
あっという間に解決しました。