機械的な作業で徹夜してしまうことほど悲しいことはない.
唯一の習得は,Lua にテーブルのテーブルを渡す方法が分かったこと.はぁ.
Lua側で
if PSS.corrected[1] then print( "hoge" ) end
とかできるようになったということ.
一応書いておくと,C側の書き方は
lua_getglobal( L_, "PSS" ); if( !lua_istable( L_, -1 ) ) { printf( "PSS is not a table...\n" ); } lua_pushstring( L_, "corrected" ); lua_gettable( L_, -2 ); if( !lua_istable( L_, -1 ) ) { printf( "corrected is not a table...\n" ); } lua_pushnumber( L_, 1 ); lua_pushnumber( L_, 200 ); lua_settable( L_, -3 ); lua_pop( L_, 1 );// end of corrected table lua_pop( L_, 1 );// end of PSS table
みたいな感じ.C++の薄いラッパをかぶせて使ってます.
あ,テーブル PSS とテーブル corrected の作り方も重要なんだ.
lua_pushstring( L_, "PSS" ); lua_newtable( L_ ); ... lua_settable( L_, LUA_GLOBALSINDEX ); lua_getglobal( L_, "PSS" ); if( !lua_istable( L_, -1 ) ) { printf( "PSS is not a table...\n" ); } lua_pushstring( L_, "corrected" ); lua_newtable( L_ ); // corrected テーブルを作成(名前,テーブル本体がpushされる) lua_settable( L_, -3 ); // corrected を PSS に追加. lua_pop( L_, 1 );
分かってしまえば当たり前のこと.もっと簡単な方法もあるのかなぁ.