是不是有一个Ruby或Ruby的主题? 对面的零? 方法?

我没有经验Ruby,所以我的代码感觉“丑陋”,而不是惯用的:

def logged_in? !user.nil? end 

我宁愿有类似的东西

 def logged_in? user.not_nil? end 

但是找不到对立的这种方法nil?

当你使用ActiveSupport时,有user.present? http://api.rubyonrails.org/classes/Object.html#method-i-present%3F ,检查非零,为什么不使用

 def logged_in? user # or !!user if you really want boolean's end 

你似乎过于关心布尔人。

 def logged_in? user end 

如果用户是零,然后logged_in? 将返回一个“虚假”的价值。 否则,它将返回一个对象。 在Ruby中,我们不需要返回true或false,因为我们有像JavaScript一样的“truthy”和“falsey”值。

更新

如果你使用的是Rails,你可以使用present?更好地阅读这些内容present? 方法:

 def logged_in? user.present? end 

也许这可能是一个办法:

 class Object def not_nil? !nil? end end 

您可以使用以下内容:

 if object p "object exists" else p "object does not exist" end 

这不仅适用于零,但也是错误的,所以你应该testing,看看它是否在你的用例。

当心其他答案呈现present? 作为你的问题的答案。

present?blank?的对面blank? 在路轨。

present? 检查是否有一个有意义的价值。 这些东西可能会失败的present? 检查:

 "".present? # false " ".present? # false [].present? # false false.present? # false YourActiveRecordModel.where("false = true").present? # false 

而一个!nil? 检查给出:

 !"".nil? # true !" ".nil? # true ![].nil? # true !false.nil? # true !YourActiveRecordModel.where("false = true").nil? # true 

nil? 检查一个对象实际上是否nil 。 任何其他:一个空string, 0false ,不pipe,不是nil

present? 是非常有用的,但绝对不是相反的nil? 。 混淆两者可能会导致意想不到的错误。

为了你的使用情况present? 将工作,但要明白其中的差异总是明智的。