为什么Lua有`<=` *** 作码和metamethod?

为什么Lua有`<=` *** 作码和metamethod?,第1张

概述除了==和<之外,Lua还有< = *** 作码和元方法(OP_LE,TM_LE). 文档说 in the absence of a “le” metamethod, Lua tries the “lt”, assuming that a <= b is equivalent to not (b < a) 但为什么首先有’< ='?为什么它不能总是不使用(b 和> = *** 作码和元方法? 让我们实现 sets 除了==和<之外,Lua还有< = *** 作码和元方法(OP_LE,TM_LE). 文档说

in the absence of a “le” Metamethod,Lua trIEs the “lt”,assuming that a <= b is equivalent to not (b < a)

但为什么首先有’< ='?为什么它不能总是不使用(b 和> = *** 作码和元方法? )a

解决方法 让我们实现 sets.使用订单运算符进行包含测试真的很简洁. a< b意味着“a是b的适当子集”. a = b将mena“a和b相等”. a< = b意味着“a是b的子集”(不一定是合适的,因此它们可能相等). 现在考虑

a = Set:new{1,2,3}b = Set:new{"a","b","c"}

现在既不是< = b也不是< b是真的.这是为什么?因为子集关系仅定义了partial order.a< = b等效于(a> b)的逻辑假设仅对定义total order的完全关系有效.

(示例受“Lua编程,第3版”第131页启发)

编辑:

解决您的更新.为什么没有Lua Metamethods~ =,>和> =关于DSL实现?

即使在部分有序的集合上,以下也始终如此:

a > b    <==>   b < aa >= b   <==>   b <= aa ~= b   <==>   not (b == a)

为<定义不同的含义和> (切换顺序除外)会让你的代码真的很混乱,你不觉得吗?同样的事情,如果两个a和b可以是相等的和不相等的(或两者都不是).我想,这就是为什么Lua做出这样的假设,它总是可以用其他运算符来实现这三个运算符.

总结

以上是内存溢出为你收集整理的为什么Lua有`<=` *** 作码和metamethod?全部内容,希望文章能够帮你解决为什么Lua有`<=` *** 作码和metamethod?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228244.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存