print(-1 == -1)和(myobj.nil?)
真
print(-1 == -1)&& (myobj.nil?)
假
注意,myobj.nil?返回false 所以,这不应该是假的。
答案 0 :(得分:3)
&&
和and
具有不同的优先级。特别是,and
具有非常低的优先级,低于几乎任何其他值。
print
的返回值为nil
,至少在Ruby 1.8中。因此,第一个表达式会像这样减少:
(print (-1 == -1)) and myobj.nil?
(print true) and myobj.nil? # => with the side-effect of printing "true"
nil and myobj.nil?
nil
虽然第二个表达式会像这样减少:
print ((-1 == -1) && myobj.nil?)
print ( true && myobj.nil?)
print myobj.nil?
print false # => with the side-effect of printing "false"
nil
答案 1 :(得分:1)
因为它们具有不同的运算符优先级。
第一个评估为:
(print (-1 == -1)) and (myobj.nil?)
它打印为true,因为-1 == -1,然后print返回nil,nil and false
为nil。
第二个相当于:
print ((-1 == -1) && (myobj.nil?))
打印(true&& false),这是假的,然后print返回nil。