关于ruby:是!object.nil? == object.present? 在Rails?

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


.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


一般来说,根据这里的文档我不这么认为。

但以下情况应该如此

1
!object.blank? == object.present?

在你的情况下,我认为它应该是真的,因为方法current_user是如何定义的。