加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua – 是否可以检查2个函数是否相等?

发布时间:2020-12-15 00:26:44 所属栏目:大数据 来源:网络整理
导读:是否有可能以字节为单位获取函数的大小以查看它是否与另一个类似于C sizeof运算符的函数匹配,或者以其他方式评估两个函数以查看它们是否相等而不实际知道函数是什么?例: local function equals(func1,func2) -- check them and return true if equalend 如
是否有可能以字节为单位获取函数的大小以查看它是否与另一个类似于C sizeof运算符的函数匹配,或者以其他方式评估两个函数以查看它们是否相等而不实际知道函数是什么?例:
local function equals(func1,func2)
   -- check them and return true if equal
end

如果这不可能只说,那将满足我的答案!
谢谢!

编辑:我需要检查一个函数的主体,看它是否与另一个函数的主体相同.内存中的引用将不同,因此我不能使用“==”,但函数的引用名称可能不同.

解决方法

使用== for functions仅检查它们是否引用了相同的函数,这不是您所期望的.

如果不是不可能的话,这项任务相当困难.对于非常简单的案例,这里有一个想法:

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,0 upvalues,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,0 functions
        1       [2]     ADD             1 0 -1  ; - 1
        2       [2]     RETURN          1 2
        3       [2]     RETURN          0 1

如您所见,这两个函数在虚拟机中具有相同的指令.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读