我在这里从根本上误解了Ruby吗?我已经写了大约2年的Ruby代码了,就在今天偶然发现了......
ruby-1.8.7-p249 > i = true and false
=> false
ruby-1.8.7-p249 > i
=> true
有人能解释一下这里发生了什么吗?我确定它符合规范,但这对我来说似乎有点直观......
答案 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 = true
,i
之后会true
。
答案 3 :(得分:3)
据我了解您的代码,它被解释为:
结果似乎是正确的。
答案 4 :(得分:1)
正如其他人在上面阐述的那样,当您想在一行上放置两个不同的 语句时,会使用关键字and
。它只是让代码可读的更好方法。
因此,
i = true and false
暗示
i = true; false
#(a less widely used code layout in ruby)
或哪种方式最直接:
i = true
false
所以,输出是正确的。否则,如果您期望false
,请使用布尔值和 &&
。