更新:我输错了 2 个变量...太尴尬了。感谢大家的努力!
抱歉,我发现我为 2 个不同的环境输入了错误的值,第一个我设置了 sort = 0
和 rating=1
但后来在 irb 中我设置了 sort=1
和 rating=0
。因为对于 a 和 b
,当 a=1
时它只评估 b
所以在第二种情况下我得到 false
。现在很清楚了。抱歉粗心,感谢大家的努力!
======================
我的问题:我有 2 个变量,sort
和 rating
,但是 sort&&rating == 1
和 sort and rating ==1
在 2 个不同的环境中表现不同,如下所示:
第一,当我执行rails server --debug
时,在rails的调试器环境中,它们都返回true
:
(rdb:130) rating
1
(rdb:130) sort
0
(rdb:130) sort and rating == 1
true
(rdb:130) sort && rating == 1
true
(rdb:130) (sort && rating) == 1
true
2,在正常的irb中,它们都返回false
:
irb(main):001:0> sort = 1
=> 1
irb(main):002:0> rating = 0
=> 0
irb(main):003:0> sort||rating
=> 1
irb(main):004:0> sort and rating
=> 0
irb(main):005:0> sort and rating == 1
=> false
irb(main):006:0> sort && rating == 1
=> false
irb(main):007:0> 0 == true
=> false
irb(main):008:0>
我知道 Ruby 是如此动态,以至于...这种情况可能吗?
是的,这种情况是可能的,0
和1
被评估为数字(Fixnum
类)所以它们都不同于假
。任何不为假的都必须为 true
(nil
除外)。
您可以使用 .zero?
方法隐式转换为 boolean
。
此外运算符||
和&&
不同于or
和and
。后者的优先级低于赋值,所以当你输入时
sort and rating
实际发生的是该语句并没有像您想象的那样执行,因为只计算了第二个操作数(因此只有它的值作为结果被压入)。
想想
ruby-1.9.2-head > 4 and 3
=> 3
ruby-1.9.2-head > 3 and 4
=> 4
我是一名优秀的程序员,十分优秀!