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

标签 lua operator-overloading

这个例子

debug.setmetatable(0,
{
    __bnot = function(a) -- ~ operator
        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 运算符?

最佳答案

根据评论:您不能用元方法覆盖所有内容。元方法是 Lua 中的回退。您只能实现未在 Lua 语言中定义的操作。例如,未定义对具有非零小数部分的数字的按位运算。

关于Lua 5.3 使用 debug.setmetatable 覆盖整数值的 ~ (__bnot) 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63729415/

相关文章:

c++ - 如何定义一些可以从 (+) 运算符的运算符重载范围内访问的函数?

lua - 在lua中获取嵌套表结果

c++ - 如何在header中声明是struct中的重载运算符?

c++ - C(++) 和 Lua 清理内存

linux - 将日志文件中的新数据附加到另一个文件

java - Java中可以重载运算符吗?

c++ - 重载运算符=,不同的类作为参数

c++ - operator= 从模板类重载

c++ - 我在 C++ 中用什么代码包装 Lua 代码?

file-io - 如何在lua中读取目录中的一堆文件