この質問への回答を使用して、luaprint
を文字列ストリームにリダイレクトしています。私の機能コードは以下の通りです。
私の問題は、コードが常に lua が独自に出力したものと一致するとは限らないことです。最も顕著なのは、関数を印刷しようとすると、関数とアドレスではなく、関数だけを取得することです。例:
> --in lua
> print(os.exit)
function: 0xabcdef01
> --in my interpreter
> print(os.exit)
function
明らかな解決策は、(デフォルトの print のように)tostring
書き込む前に、カスタムの print 関数に強制的に lua を呼び出させることです。luaout
ただし、これを機能させる方法が本当にわかりません。誰かが私を助けてくれれば、とても感謝しています。
これが私のカスタムプリントです:
static int l_my_print(lua_State* L) {
int nargs = lua_gettop(L);
for (int i=1; i <= nargs; i++) {
int t = lua_type(L, i);
switch (t) {
case LUA_TSTRING: { /* strings */
luaout << lua_tostring(L, i);
break;
}
case LUA_TBOOLEAN: { /* booleans */
luaout << (lua_toboolean(L, i) ? "true" : "false");
break;
}
case LUA_TNUMBER: { /* numbers */
luaout << lua_tonumber(L, i);
break;
}
default: { /* other values */
luaout << lua_typename(L, t);
break;
}
}
if (i!=nargs){
luaout << "\t";
}
}
luaout << endl;
return 0;
}