如何比较作为参数传递的 2 个函数
How to compare 2 functions passed as argument
我的应用程序可以使用如下代码将功能推送到 Todo 列表中:
功能测试()
打印("coucou")
结束
todo:pushtask( test ) -- First push
todo:pushtask( test ) -- Second push
在内部,待办事项列表是一个 C table 整数,我在其中推送对传递函数的引用取自:
int func = luaL_ref(L, LUA_REGISTRYINDEX);
但是我如何检测我是否在推送相同的功能?
根据我的测试,即使推送相同的函数,luaL_ref 返回也会执行不同的引用(假设引用 #1 和 #2)
如何检查#1 和#2 是否引用了同一函数?
谢谢
洛朗
函数可以直接比较。要查看您是否具有相同的功能,您需要将其与您已有的其他功能进行比较。
luaL_ref
不会为您进行比较(也不应该)。
如果你想这样做,除了 luaL_ref
(或可能代替)参考之外,你还应该保留一个 lua table,其中推送函数作为键。这将让您在 table 中查找新函数并确定(在散列 table 访问成本而不是列表遍历成本)之前是否已添加该函数。
我的应用程序可以使用如下代码将功能推送到 Todo 列表中: 功能测试() 打印("coucou") 结束
todo:pushtask( test ) -- First push
todo:pushtask( test ) -- Second push
在内部,待办事项列表是一个 C table 整数,我在其中推送对传递函数的引用取自:
int func = luaL_ref(L, LUA_REGISTRYINDEX);
但是我如何检测我是否在推送相同的功能? 根据我的测试,即使推送相同的函数,luaL_ref 返回也会执行不同的引用(假设引用 #1 和 #2) 如何检查#1 和#2 是否引用了同一函数?
谢谢
洛朗
函数可以直接比较。要查看您是否具有相同的功能,您需要将其与您已有的其他功能进行比较。
luaL_ref
不会为您进行比较(也不应该)。
如果你想这样做,除了 luaL_ref
(或可能代替)参考之外,你还应该保留一个 lua table,其中推送函数作为键。这将让您在 table 中查找新函数并确定(在散列 table 访问成本而不是列表遍历成本)之前是否已添加该函数。