戻り値をテーブルで返す方がすっきり?
拍手どうもありがとう!
たとえば、LuaでオブジェクトのポインタからXとYという成分を抽出するとき……
// C側 static int lb_getXY( lua_State * L ) { Obj * op = (Obj *)lua_touserdata(L, 1); lua_settop(L, 0); lua_pushnumber(L, op->getX()); lua_pushnumber(L, op->getY()); return 2; }
-- Lua側 local x, y = GetXY(op) -- [x]がopのX成分 -- [y]がopのY成分
という風に、戻り値を二つを受け取るよりは
// C側 static int lb_getXY( lua_State * L ) { Obj * op = (Obj *)lua_touserdata(L, 1); lua_settop(L, 0); lua_newtable(L); lua_pushnumber(L, op->getX()); lua_setfield(L, -2, "x"); lua_pushnumber(L, op->getY()); lua_setfield(L, -2, "y"); return 1; }
-- Lua側 local t = GetXY(op) -- [t.x]がX成分 -- [t.y]がY成分
こうやってテーブルで受け取った方が何かいいよね。
戻り値二つを受け取れるというLuaの特性があるにしろ、
例えば、Z成分が増えた時に、引数が三つに増えていったりすると、煩雑になりそう……。
テーブルなら、変数の定義が、かさ張らないのでメリットが多い気がする。
実行速度を検証していないけど、とりあえずは後者を活用しようかな、といったところ。