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是否为nilfalse

!object.nil? 测试object是否nil 。 (Rubydoc)

因此,当objectfalse ,它们具有不同的值。

好。 if object行为与if !object.nil?不同if !object.nil? if object=false

就是这样。

对象可以覆盖nil? 但除非它们是零或假,否则它们不能是错误的。 我个人用nil? 或ActiveSupport的present? 这样我就保持了这种灵活性。 我也认为它看起来好一点。