戻り値をテーブルで返す方がすっきり?

拍手どうもありがとう!


たとえば、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成分が増えた時に、引数が三つに増えていったりすると、煩雑になりそう……。
テーブルなら、変数の定義が、かさ張らないのでメリットが多い気がする。


実行速度を検証していないけど、とりあえずは後者を活用しようかな、といったところ。