私のC++アプリケーションのユーザーは、小さな仕事の塊を実行するための匿名関数を提供できるようにしたいと思います。Luaで無名関数を読み込むにはどうしたらいいですか?
このような小さな断片は理想的です。私は「正しいこと」を行います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