Ruby:"if!object.nil?" 或"如果对象"

big*_*ato 20 ruby

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

Mar*_*pka 30

有区别.例如:

false.nil?
# => false
Run Code Online (Sandbox Code Playgroud)

所以:

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

if false
  'foo'
end
# => nil
Run Code Online (Sandbox Code Playgroud)

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

  • @tokland感谢您的建议.如果您觉得我没有表达好,请随意编辑我的答案. (3认同)

Chr*_*bek 13

有一个和仅一个案件!object.nil?,并object评估在布尔上下文不同的结果,那就是,如果objectfalse.在所有其他情况下,结果是相同的.

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

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


Yu *_*Hao 9

if object测试是否object不是nilfalse.

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

所以,当objectfalse,他们有不同的价值观.