在Ruby中,i = true和false是真的吗?

我在这里从根本上误解了Ruby吗? 我已经写了大约2年的Ruby代码了,就在今天偶然发现了……

ruby-1.8.7-p249 > i = true and false => false ruby-1.8.7-p249 > i => true 

有人可以解释一下这里发生了什么吗? 我确定这是规格,但它对我来说似乎有点直观……

运算符&&和具有不同的优先级,并且恰好介于两者之间。

 irb(main):006:0> i = true and false => false irb(main):007:0> i => true irb(main):008:0> i = true && false => false irb(main):009:0> i => false irb(main):010:0> 

第一个读为(i = true) and false ,第二个读为i = (true && false)

and优先级低于=所以i = true and false被解析为(i = true) and false

因此将值true赋给i ,然后该操作的返回值(该值为true) and ed为false,这会导致整个表达式求值为false,即使i仍然具有值true

您的行被解析为

 i = true and false (i = true) and false true and false 

当然因为i = truei之后才会成true

据我了解您的代码,它被解释为:

  • 赋予i真实
  • 归还我和假

结果似乎是正确的。

正如其他人在上面阐述的那样,当你想在一行上放两个不同的 语句and就会使用关键字。 它只是让代码可读的更好方法。

从而,

 i = true and false 

暗示

 i = true; false  i = true; false #(ruby中使用不太广泛的代码布局) 

或者哪种方式最简单:

 i = true false
i = true false 

所以,输出是正确的。 否则,如果您期望为false ,则使用boolean和 &&