在if/else/end
语句中使用时是否相同?你平时做什么?我想知道是否有任何微妙的差异或边缘情况,object
和!object.nil?
会有不同的反应。
有差异。例如:
false.nil?
# => false
所以:
if !false.nil?
'foo'
end
# => "foo"
if false
'foo'
end
# => nil
正如@tokland所建议的,在大多数情况下,使用!obj.nil?
结构是不必要的。
布尔上下文中,!object.nil?
和object
计算出不同的结果,这是一种且仅一种情况,那就是如果object
false
。在所有其他情况下,结果是相同的。
有了这个,我想我们可以回答你的真正问题(即:在防止object
为零时,我是否必须使用if !object.nil?
而不仅仅是if object
?
不,如果您想检查nil
,您可以随时使用 if object
.
if object
测试object
是否nil
或false
。
!object.nil?
测试object
是否nil
。(鲁比多克(
所以当object
false
时,它们有不同的值。
嗯。 如果object=false
,if object
的行为将与if !object.nil?
不同。
仅此而已。
对象可以覆盖nil?
但除非它们为 nil 或 false,否则它们不能为假。就我个人而言,我使用nil?
或ActiveSupport的present?
,以便保持这种灵活性。我也认为它读起来更好一点。