i=Ruby中的true和false是否为true?

i=Ruby中的true和false是否为true?,ruby,Ruby,我根本上误解了Ruby吗?我写Ruby代码已经两年了,就在今天,我偶然发现了这个 ruby-1.8.7-p249 > i = true and false => false ruby-1.8.7-p249 > i => true 有人能解释一下这里发生了什么事吗?我确信它符合规范,但对我来说这似乎是违反直觉的…和的优先级低于=,因此I=true和false被解析为(I=true)和false 因此,值true被分配给i,然后该操作的返回值(为true)被和ed加

我根本上误解了Ruby吗?我写Ruby代码已经两年了,就在今天,我偶然发现了这个

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

有人能解释一下这里发生了什么事吗?我确信它符合规范,但对我来说这似乎是违反直觉的…

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


因此,值
true
被分配给
i
,然后该操作的返回值(为true)被
ed加上false,这导致整个表达式的计算结果为
false,
即使
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)和false
,第二个读作
i=(true&&false)
,您的行被解析为

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

当然,由于
i=true
i
之后将是
true

根据我对您代码的理解,它被解释为:

  • 忠于我
  • 返回i和false

结果似乎是正确的。

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

因此,

暗示

或者哪种方式最直接:

 
 i = true
 false 

因此,输出是正确的。否则,如果您希望
false
,请使用布尔and和
&&

thnx!我不知道和和之间有什么区别,我会仔细阅读。这是Ruby语言的一个奇怪的怪癖。昨天,在我学习Ruby的第一天,我在一篇“Ruby for Python程序员”的文章中遇到了这个警告:)我觉得奇怪,我以前从未遇到过这个问题,因为我一直在使用这种语句。我现在必须回去回顾大量代码:(不仅仅是Ruby做到了这一点,Perl也有同样的奇怪之处,
&
具有不同的优先级。Ruby在某些方面与Perl非常相似。可能有一行Perl模块,您可以
使用Ruby;
并用Ruby语法编写Perl脚本的其余部分。)他们“为什么”part是的副本,而what part是这个的副本严格来说是不正确的;如果语句的第一部分的计算结果为false或nil,那么第二部分就永远不会被计算。因此,例如,
i=false和do_some_stuff
i=false;do_some_stuff
,这是非常不同的以前,
做一些事情
不会运行。
i = true; false
#(a less widely used code layout in ruby)
 
 i = true
 false