gpt4 book ai didi

lua - 如何在 Lua 中加载未命名的函数?

转载 作者:行者123 更新时间:2023-12-03 03:38:55 27 4
gpt4 key购买 nike

我希望我的 C++ 应用程序的用户能够提供匿名函数来执行小块工作。

像这样的小片段是理想的。

function(arg) return arg*5 end

现在我希望能够为我的 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);

但是我不认为 lua_loadstring 会做“正确的事情”。

我是否觉得这是一次可怕的黑客攻击?

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);

有更好的解决方案吗?

最佳答案

如果您需要访问参数,那么您的编写方式是正确的。 lua_loadstring 返回一个代表您正在编译的 block /代码的函数。如果您想实际从代码中获取函数,则必须返回它。我也为小的“表达式求值器”这样做(在 Lua 中),而且我不认为这是一个“可怕的黑客”:)

如果你只需要一些回调,不带任何参数,可以直接编写代码,使用lua_tostring返回的函数。您甚至可以将参数传递给该 block ,它将可以作为 ... 表达式进行访问。然后你可以得到参数为:

local arg1, arg2 = ...
-- rest of code

您可以决定什么对您更好 - 库代码库中的“丑陋代码”,或 Lua 函数中的“丑陋代码”。

关于lua - 如何在 Lua 中加载未命名的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4823791/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com