Ruby:“if!object.nil?”或“if object”
在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
。 在所有其他情况下,结果是相同的。
有了这个,我想我们可以回答你真正的问题(这是:有什么情况我必须使用if !object.nil?
而不仅仅是在保护object
为nil时的object
?):
不,如果你想检查nil
,你总是可以使用if object
。
if object
测试object
是否为nil
或false
。
!object.nil?
测试object
是否nil
。 (Rubydoc)
因此,当object
为false
,它们具有不同的值。
好。 if object
行为与if !object.nil?
不同if !object.nil?
if object=false
。
就是这样。
对象可以覆盖nil?
但除非它们是零或假,否则它们不能是错误的。 我个人用nil?
或ActiveSupport的present?
这样我就保持了这种灵活性。 我也认为它看起来好一点。