Desidero che gli utenti della mia applicazione C++ siano in grado di fornire funzioni anonime per eseguire piccole porzioni di lavoro.Come posso caricare una funzione senza nome in Lua?
Piccoli frammenti come questo sarebbero l'ideale.
function(arg) return arg*5 end
Ora mi piacerebbe essere in grado di scrivere qualcosa di semplice come questo per il mio codice C,
// Push the function onto the lua stack
lua_xxx(L, "function(arg) return arg*5 end")
// Store it away for later
int reg_index = luaL_ref(L, LUA_REGISTRY_INDEX);
Tuttavia non penso lua_loadstring farà "la cosa giusta".
Sono partito con quello che mi sembra un orribile hack?
void push_lua_function_from_string(lua_State * L, std::string code)
{
// Wrap our string so that we can get something useful for luaL_loadstring
std::string wrapped_code = "return "+code;
luaL_loadstring(L, wrapped_code.c_str());
lua_pcall(L, 0, 1, 0);
}
push_lua_function_from_string(L, "function(arg) return arg*5 end");
int reg_index = luaL_ref(L, LUA_REGISTRY_INDEX);
C'è una soluzione migliore?
Ho anche deciso che non è proprio così hacky come suggerito il mio istinto. E poiché gli utenti finali scriveranno le funzioni lua, penso che il mio "non-così-orribile" hack sia l'unica strada da percorrere. –
Michal ha ragione. Il "chunk" può accettare argomenti ma ha bisogno del ritorno. – mlepage