i=Ruby中的true和false是否为true?
我根本上误解了Ruby吗?我写Ruby代码已经两年了,就在今天,我偶然发现了这个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-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