以下のコードは動作はするが、予期せぬ結果となる。
script.lua
function func(num)
return num;
end
main.cpp
#include "lua.hpp"
int main( void ) {
lua_State* p = luaL_newstate();
luaopen_math( p );
luaL_dofile( p, "script.lua" );
int num = 100;
lua_getglobal( p, "func" );
lua_pushnumber( p, num );
lua_pcall( p, 1, 1, 0 );
num = lua_tonumber( p, 1 );
lua_close( p );
return 0;
}
最終的にnumに入っている値は100であると予想されるが、
実際には0が入っている。
luaopen_mathを呼び出した際に、謎の LUA_TTABLE がプッシュされるため、
スタックの一番下には func の返り値ではなく、
テーブルが入っており、その上に返り値が積まれている。
NG: num = lua_tonumber( p, 1 );
OK: num = lua_tonumber( p, -1 );
何が積まれているのかは調べたけど分からなかった。
誰か、Luaに詳しい方で分かる方いらっしゃったら教えて下さい。
0 件のコメント:
コメントを投稿