Is !object.nil? == object.present? in Rails?
假设Rails中的!object.nil? == object.present?是否安全,或者有没有? 这是一个场景:
1 2 3 4 5 6 7 8 9 10 11 12
| def signed_in?
!current_user.nil? # Would current_user.present? mean the same thing here?
end
def sign_in(user)
cookies[:token] = user.token
self.current_user = user
end
def current_user
@current_user ||= User.find_by(token: cookies[:token]) if cookies[:token]
end |
-
!object.blank? == object.present ?,检查这个问题也很有趣:stackoverflow.com/questions/885414/…
.present?是.blank?的否定,它与.nil?相似但绝对唯一。
.nil?仅评估对象是否为NilClass。
在评估非空的字符串时,.blank?的计算结果为true,并且可能(或可能不)包含空格。
这对你的问题来说是多余的,但是注意.blank?和.present?是Rails方法可能很方便,而.nil?是纯Ruby。
编辑:
如果在您的示例中,object等于false,那么不,假设!object.nil? == object.present?是不安全的。 但是,如果object实际上是Ruby / Rails对象,则可以安全地假设该语句将评估为true。
1
| !false.nil? == false.present? #=> false |
-
我明白了,谢谢。 我仍然无法弄清楚它是否会对我的用例产生影响,尽管......
-
它没有任何区别。 别担心。
-
"blank?在评估非空的字符串时评估为true并且......" - 这是否准确? 在我的rails控制台中,评估''.blank?会返回true。 nil.blank?也是如此。
一般来说,根据这里的文档我不这么认为。
但以下情况应该如此
1
| !object.blank? == object.present? |
在你的情况下,我认为它应该是真的,因为方法current_user是如何定义的。
-
"".nil? # => false | "".present? # => false | "".blank # => true |
-
另请参阅Object#blank?的文档 - 如果对象为false,空或空白字符串,则该对象为空。 例如,"","",nil,[]和{}都是空白的
-
我现在明白了,但我不确定我的用例是否有一个微妙的问题...即如果我从!nil?更改为present? - 据我所知它是负面的。