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

时间:2010-05-10 12:18:31

标签: ruby

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

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

有人能解释一下这里发生了什么吗?我确定它符合规范,但这对我来说似乎有点直观......

5 个答案:

答案 0 :(得分:30)

运营商&&and具有不同的优先级,而=恰好介于两者之间。

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)

答案 1 :(得分:13)

and的优先级低于=,因此i = true and false被解析为(i = true) and false

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

答案 2 :(得分:3)

您的行被解析为

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

当然,由于i = truei之后会true

答案 3 :(得分:3)

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

  • 赋予i
  • 返回i和false

结果似乎是正确的。

答案 4 :(得分:1)

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

因此,

 i = true and false 

暗示

i = true; false #(a less widely used code layout in ruby)

或哪种方式最直接:

  
 i = true
 false 

所以,输出是正确的。否则,如果您期望false,请使用布尔值和 &&