Lua 5.3 使用debug.setmetatable重载整数值的 ~ (__bnot) 运算符

这个示例

debug.setmetatable(0,
{
    __bnot = function(a) -- ~ 运算符
        print("yay ".. a)
        return a
    end
})
print(~ (0))
print(~ (0.3))
print(~ (1))
print(~ (2))
print(~ (2.1))

输出结果如下

-1
yay 0.3
0.3
-2
-3
yay 2.1
2.1

我本来期望的输出结果是

yay 0
0
yay 0.3
0.3
yay 1
1
yay 2
2
yay 2.1
2.1

看起来这个方法并没有作用于整数值上。

如何重载所有数字的 not 运算符?

点赞
用户734069
用户734069

根据注释:你无法使用元方法覆盖所有内容。元方法在Lua中是后备方案。您只能实现在Lua语言中未定义的操作。例如,对具有非零分数部分的数字进行位运算未定义。

2020-09-04 02:43:45