在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 = true
, i
之后才会成true
。
据我了解您的代码,它被解释为:
- 赋予i真实
- 归还我和假
结果似乎是正确的。
正如其他人在上面阐述的那样,当你想在一行上放两个不同的 语句时and
就会使用关键字。 它只是让代码可读的更好方法。
从而,
i = true and false
暗示
i = true; false
i = true; false
#(ruby中使用不太广泛的代码布局)
或者哪种方式最简单:
i = true false
i = true false
所以,输出是正确的。 否则,如果您期望为false
,则使用boolean和 &&
。