3

如果我问自己object.not_nil?vs ,我想我会更好地看到我的代码!object.nil?。所以我的问题是:真的没有!nil 的便捷方法吗?加糖?它是在我眼前而我看不到它还是我只是错过了一个重要的点?

4

5 回答 5

6

这个怎么样?

not object.nil?

但更容易做的事情是通过测试变量本身来检查“真实性”。因为nil是隐含的false,你可以检查object.

于 2012-09-27T13:00:26.603 回答
4

您可以在上层引入糖。代替:

if not object.nil?

你可以写:

unless object.nil?
于 2012-09-27T13:10:00.880 回答
3
  • 那这个呢 ?

    if object
      # sth
    end
    

    它与如果为 false 则不会执行object不同,但取决于您的代码,它可能会更好。

  • 另一种解决方案(这也不相同),因为您用ruby-on-rails-3: using present?which will not execute the block for []or {}distinct标记您的问题!object.nil?

  • 另一个取决于具体情况:如果您的情况更复杂(使用and/or ) ,使用unlesswhich 将不是很好。&&||

  • 如果您的情况是这种形式:

     if !object.nil? && object.something?
       # sth
     end
    

    您可以try像使用 Rails 一样使用,如下所示:

    if object.try(:something?)
      # sth
    end
    
  • 在所有其他情况下,!object.nil?或者not object.nil?保持我猜的最佳解决方案。

于 2012-09-27T13:12:31.030 回答
2

#nil 附近什么时候方便?讨论,Activesupport 的方法#blank?和#present?也不应该被遗忘。

于 2012-09-27T13:19:53.477 回答
2

不是你一定想要,但你可以not_nil?自我介绍:

class Object
    def not_nil?
        !self.nil?
    end
end

那么您可以执行以下操作:

nil.not_nil?
==> false

3.not_nil?
==> true

a = []
a.not_nil?
==> true

于 2012-09-27T13:46:33.993 回答