调用 Lua 函数。

我想在 Lua 和 C 中处理以下代码:

假设我有一个名为 Foo 的 C 函数,它已经与 Lua 绑定。我在 Lua 脚本中调用它如下:

Foo(15, "bar", function(z) return 2 * z + 1 end)

在 C 端,我检索参数并可以将数字和字符串存储在我的结构中。但我需要什么数据类型来存储匿名函数?我如何在以后调用它?

原文链接 https://stackoverflow.com/questions/6447664

点赞
stackoverflow用户107090
stackoverflow用户107090

你可以将函数留在堆栈中,也可以使用luaL_ref将其保存在注册表或其他表中。

2011-06-22 23:45:09
stackoverflow用户105460
stackoverflow用户105460

本页面可能也有帮助:http://www.lua.org/pil/25.2.html

还有这个:http://www.luafaq.org/#T7.2

在这里看到了答案:how to callback a lua function from a c function

2011-06-22 23:46:04
stackoverflow用户734069
stackoverflow用户734069

你不能把 Lua 函数存储为 C 数据类型,就像你不能把 Lua 表存储为 C 数据类型一样。

你可以使用 注册表 来存储该值。注册表是一个全局可用的表格,对于所有 C 用户来说都可以用来存储数据。通常最好为您的代码选择一个唯一的键,并在该键上放置一个表格。该表格将包含您要保留的值。这将有助于减少其他 C 代码使用注册表时出现的冲突。

2011-06-22 23:47:51
stackoverflow用户811325
stackoverflow用户811325

一般情况下,你不会把函数存储在 C 变量中。你会将它留在堆栈中并使用 pcall() 调用它。示例如下:

int l_Foo(lua_State *L)
{
  lua_pop(L, 2);         /* 忽略前两个参数 */
                         /* (函数现在在堆栈顶部) */
  lua_pushnumber(L, 2);  /* 将要传递作为 z 的数字推送 */
  lua_pcall(L, 1, 1, 0); /* 使用 1 个参数调用函数,期望 1 个结果 */
  lua_pop(L, 1);         /* 忽略结果 */
}

为了简洁起见,我省略了一些错误检查,但是请参阅 Lua 程序设计 获取更完整的示例,以及 Lua 参考手册 获取有关函数的更多细节。

2011-06-22 23:56:05
stackoverflow用户811335
stackoverflow用户811335

一种方法是在 lua 端 进行匿名函数的操作,并将函数的结果传递给 FOO(int, char *, fun_result_type fun_result)

2011-06-23 05:28:27