为什么Lua有`<=`操作码和metamethod?
发布时间:2020-12-14 21:48:51 所属栏目:大数据 来源:网络整理
导读:除了==和之外,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 解决
除了==和<之外,Lua还有< =操作码和元方法(OP_LE,TM_LE). 文档说
但为什么首先有’< ='?为什么它不能总是不使用(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 < a a >= b <==> b <= a a ~= b <==> not (b == a) 为<定义不同的含义和> (切换顺序除外)会让你的代码真的很混乱,你不觉得吗?同样的事情,如果两个a和b可以是相等的和不相等的(或两者都不是).我想,这就是为什么Lua做出这样的假设,它总是可以用其他运算符来实现这三个运算符. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |