내 C++ 응용 프로그램 사용자가 작은 작업을 수행하기 위해 익명의 기능을 제공 할 수 있기를 바랍니다.루아에서 이름없는 함수를로드하려면 어떻게해야합니까?
이와 같은 작은 조각은 이상적입니다. 나는 "옳은 일"을 할 것 lua_loadstring 같아요 그러나
function(arg) return arg*5 end
는 지금은
// 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);
, 내 C 코드에 대한이 같은 간단한을 쓸 수 있도록하고 싶습니다.
내가 끔찍한 해킹처럼 내게 어떤 느낌으로 남았습니까?
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);
더 좋은 해결책이 있습니까?
나는 내 직감이 제안한 것처럼 해키가 아니라고 결정했다. 그리고 최종 사용자가 루아 함수를 작성하려고하기 때문에 나는 "그렇게 끔찍한"해킹이 유일한 방법이라고 생각합니다. –
미칼이 맞습니다. "덩어리"는 인수를 수락 할 수 있지만 반환해야합니다. – mlepage