是不是有一个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, 0 , false ,不pipe,不是nil 。
present? 是非常有用的,但绝对不是相反的nil? 。 混淆两者可能会导致意想不到的错误。
为了你的使用情况present? 将工作,但要明白其中的差异总是明智的。