gpt4 book ai didi

lua - 为什么 Lua 有 `<=` 操作码和元方法?

转载 作者:行者123 更新时间:2023-12-04 21:28:31 24 4
gpt4 key购买 nike

除了==< , Lua 有 <=操作码和元方法( OP_LETM_LE )。

文档说

in the absence of a "le" metamethod, Lua tries the "lt", assuming that a <= b is equivalent to not (b < a)



但为什么首先有'<='?为什么不能一直使用 not (b < a)对于 a <= b ?

更新:

如果都是关于 DSL、“语言 Hook ”等,那么为什么 Lua 没有 ~= , > , 和 >=操作码和元方法?

最佳答案

让我们实现sets .使用顺序运算符进行包含测试真的很巧妙。 a < b将意味着“ab 的真子集”。 a = b是否会“ab 相等”。 a <= b将意味着“ab 的子集”(不一定是正确的,因此它们可能相等)。

现在考虑

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

现在都没有 a <= b也不是 a < b是真的。这是为什么?因为子集关系只定义了一个 partial order . a <= b 的逻辑假设相当于 not(a > b)仅对定义 total order 的完全关系有效.

(示例灵感来自“Lua 中的编程,第 3 版”第 131 页)

编辑:

解决您的更新。为什么 ~= 没有 Lua 元方法, >>=关于DSL实现?

即使在偏序集上,以下情况也总是正确的:
a > b    <==>   b < a
a >= b <==> b <= a
a ~= b <==> not (b == a)

< 定义不同的含义和 > (除了切换顺序)会让你的代码真的很困惑,你不觉得吗?如果两个 a 则相同和 b既可以相等也可以不相等(或两者都不是)。我想,这就是 Lua 做出假设的原因,即它总是可以根据其他运算符实现这三个运算符。

关于lua - 为什么 Lua 有 `<=` 操作码和元方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16262152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com