是否可以以字节为单位获取函数的大小以查看它是否与类似于 C++ sizeof 运算符的另一个函数匹配,或者以其他方式评估两个函数以查看它们是否相等而实际上不知道函数是什么?例子:
local function equals(func1, func2)
-- check them and return true if equal
end
如果这是不可能的,就说,这将满足我的回答!
谢谢!
编辑:一个函数的主体是我需要检查的,以查看它是否与另一个函数的主体相同。内存中的引用会有所不同,所以我不能使用“==”,但函数的引用名称可以不同。
最佳答案
使用 ==
for 函数只检查它们是否引用了同一个函数,这不是您所期望的。
这项任务相当困难,甚至根本不可能。对于非常简单的情况,这里有一个想法:
function f(x) return x + 1 end
local g = function(y) return y + 1 end
f
和 g
是根据您的定义相等的两个函数。假设文件是 t.lua
, 跑:luac -l t.lua
输出是:
main <t.lua:0,0> (4 instructions at 00000000003081c0)
0+ params, 2 slots, 1 upvalue, 1 local, 1 constant, 2 functions
1 [1] CLOSURE 0 0 ; 0000000000308330
2 [1] SETTABUP 0 -1 0 ; _ENV "f"
3 [2] CLOSURE 0 1 ; 0000000000308dc0
4 [2] RETURN 0 1
function <t.lua:1,1> (3 instructions at 0000000000308330)
1 param, 2 slots, 0 upvalues, 1 local, 1 constant, 0 functions
1 [1] ADD 1 0 -1 ; - 1
2 [1] RETURN 1 2
3 [1] RETURN 0 1
function <t.lua:2,2> (3 instructions at 0000000000308dc0)
1 param, 2 slots, 0 upvalues, 1 local, 1 constant, 0 functions
1 [2] ADD 1 0 -1 ; - 1
2 [2] RETURN 1 2
3 [2] RETURN 0 1
可以看到,这两个函数在虚拟机中的指令是一样的。
关于function - Lua - 是否可以检查 2 个函数是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30738429/