21

if/else/end它们在语句中使用时是否相同?你平常都做什么?我想知道是否存在任何细微的差异或边缘情况,object并且!object.nil?会做出不同的反应。

4

5 回答 5

33

有区别。例如:

false.nil?
# => false

所以:

if !false.nil?
  'foo'
end
# => "foo"

if false
  'foo'
end
# => nil

正如@tokland 所建议的,在大多数情况下,使用!obj.nil?构造是不必要的。

于 2013-08-05T14:33:45.850 回答
14

只有一种情况,在布尔上下文!object.nil?object评估不同的结果,那就是 if objectis false。在所有其他情况下,结果是相同的。

有了这个,我想我们可以回答你真正的问题(即:有没有我必须使用的情况,if !object.nil?而不仅仅是if object在防止object被 nil 时使用?):

if object不,如果您想检查,您可以随时使用nil.

于 2015-05-28T21:29:09.927 回答
9

if object测试是否object不是nilor false

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

所以当objectis时false,它们有不同的值。

于 2013-08-05T14:35:17.947 回答
2

出色地。将与ifif object表现不同。if !object.nil?object=false

就是这样。

于 2013-08-05T14:33:59.037 回答
1

对象可以覆盖nil?,但它们不能是错误的,除非它们是 nil 或 false。我个人使用nil?ActiveSupport present?,以便保持这种灵活性。我也觉得它读起来好一点。

于 2013-08-05T14:35:24.703 回答