如何比较作为参数传递的两个函数

我的应用程序可以使用以下代码将函数推送到Todo列表中:

function test()
print("coucou")
end
todo:pushtask( test )  - 第一次推送
todo:pushtask( test )  - 第二次推送

在内部,待办事项列表是一个整数C表,我在其中推送一个从中获取的传递函数的引用:

int func = luaL_ref(L, LUA_REGISTRYINDEX);

但是我如何检测是否正在推送相同的函数? 根据我的测试,即使推送了相同的函数(假设为引用#1和#2),luaL_ref返回的结果也不同。 我该如何检查#1和#2是否是引用到同一个函数?

谢谢

Laurent

点赞
用户258523
用户258523

函数可以直接比较

要查看是否具有相同的函数,您需要将它与已经拥有的其他函数进行比较。

luaL_ref不会为您执行此比较(也不应该)。

如果您想要进行此操作,除了luaL_ref的引用(或可能是其替代品)之外,还应该保留一个 Lua 表格,其中推送的函数作为键。这将允许您在表格中查找新函数,并在哈希表访问成本而不是列表遍历成本时确定是否以前已添加该函数。

2015-11-12 14:14:28