是不是有一个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?
将工作,但要明白其中的差异总是明智的。