C++ uygulamamın kullanıcıları, küçük iş parçaları gerçekleştirmek için anonim işlevler sağlayabilmelerini istiyorum.Lua'da adlandırılmamış bir işlevi nasıl yükleyebilirim?
Bunun gibi küçük parçalar idealdir. Ben "doğru olanı" yapacak lua_loadstring sanmıyorum Ancak
function(arg) return arg*5 end
Şimdi
// 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);
, benim C kodu için bu kadar basit bir şeyi yazabilmek istiyorum.
Korkunç bir kesmek gibi hissettiren şeyle mi kaldım?
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);
Daha iyi bir çözüm var mı?
Ayrıca, bağırsak hislerimin önerdiği kadar da çirkin olmadığına karar verdim. Ve son kullanıcılar lua fonksiyonlarını yazacaklarından beri, "o kadar da korkunç olmayan" hacklerimin gitmenin tek yolu olduğunu düşünüyorum. –
Michal'ın hakkı var. "Yığın" argümanları kabul edebilir, ancak geri dönüşe ihtiyaç duyar. – mlepage