奇怪的ruby逻辑&&运算符结果

Mai*_*kon 0 ruby comparison logical-operators

我在Pry玩,遇到了这个:

20] pry(main)> ('X' && 'O') == 'X'
=> false
[22] pry(main)> ('O' && 'X') == 'X'
=> true
Run Code Online (Sandbox Code Playgroud)

有了这个,我试图检查括号内的两个值是否与右边的值相同.第二个结果告诉我,我错过了一些东西.

看起来它正在返回最后一次比较的值('X'=='X'),但我认为&&会在发现第一个错误后立即停止?

我可以看到为什么顺序一般很重要,但我想通过将它们包装在()中它们会被检查为一个条件?

Aru*_*hit 5

但我觉得&&会在发现第一个错误后立即停止?

你是对的.但这并没有发生在你的任何一个例子中.

在您的这两个例子'O''X',是字符串对象,其中有truthy价值.

在示例中('X' && 'O') == 'X',('X' && 'O')给出"O",并将其与之进行比较"X",这是false当然的.所以你得到了false.

在另一个('O' && 'X') == 'X',('O' && 'X')给出"X",然后进行比较"X",当然应该是true.因此,你进入true了你的PRY.

注意:在Ruby中,除了和之外,所有对象都具有真正的价值.nilfalse

在使用时&&,它将继续评估,所有的表达,直到它得到一个被评价为的表达.