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

标签 function lua byte equals

是否可以以字节为单位获取函数的大小以查看它是否与类似于 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
fg是根据您的定义相等的两个函数。假设文件是​​ 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/

相关文章:

java - 在函数原型(prototype)中它显示错误

c++ - 为什么会有函数隐式转换为 boolean 值?

lua - 转换时更新目标坐标

c - 重新排序 double 类型的数据

javascript - 为什么我不能为每个数组项调用这个函数?

javascript - IIFE inside for loop error VM531 :3 Uncaught TypeError: console. log(...)

java - 如何在 Objective-C 中将字节数组转换为 UInt64

java - 如何使用java卡向智能卡写入数据?举例说明

asynchronous - 在 Neovim 中运行异步 Lua 函数

printing - 为什么 print(print()) 在 Lua 中不像 print(type(2)) 那样工作?