为什么Lua要以现在这种方式进行比较?

请原谅,如果标题不太合适。我必须在“Lua的比较方式是否有用?”和“Lua中的比较”之间进行选择。今天我想做这样的事情:

 if currChar == nextChar == "-" then
    ...
 end

但它每次都返回false

> currChar="-"
> nextChar="-"
> =currChar == nextChar == "-"
false
>
-- Python中都是True
print(5 == 5)                    -- true
print(5 == 5 == 5)               -- false
print((5 == 5) == (5 == 5))      -- true
print(5 == (4 + 1) == (6 - 1))   -- false

我尝试了一段时间的值,并发现由于某种原因,Lua从左到右成对比较值:

> = 52 > 3 > 2
stdin:1: attempt to compare number with boolean
stack traceback:
        stdin:1: in main chunk
        [C]: in ?
>

有没有一种情况下,这种比较方式是有用的?

为什么要那样比较?

点赞
用户2617694
用户2617694

Lua 的比较运算符是真正的二元运算符。它们仅对两个操作数进行操作。在 Lua 中,“5 == 5 == 5”被解释为 “(5 == 5) == 5”,简化为 “True == 5”,因此为假。另一方面,在 Python 中,“5 == 5 == 5”被解释为“5 == 5 and 5 == 5”,结果为真。

Python 支持比较运算符的链接,这是不典型的,在其中 “x < y < z” 转换为 “x < y and y < z”。我知道的并不多的语言都支持这种语法。

至于它是否有用,完全是随意的。链式语法只是一种简写形式。

2013-12-11 02:12:33