加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 为什么单个`=`在`if`语句中工作?

发布时间:2020-12-17 04:17:15 所属栏目:百科 来源:网络整理
导读:此代码作为与devise和OmniAuth一起使用的示例提供,它在 my project中有效. class User ActiveRecord::Base def self.new_with_session(params,session) super.tap do |user| if data = session["devise.facebook_data"] session["devise.facebook_data"]["ex
此代码作为与devise和OmniAuth一起使用的示例提供,它在 my project中有效.
class User < ActiveRecord::Base
  def self.new_with_session(params,session)
    super.tap do |user|
      if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
        user.email = data["email"] if user.email.blank?
      end
    end
  end
end

我不知道为什么它是一个单一的等号作为一个双等号,我认为这是if语句所必需的.我的IDE“intelliJ IDEA”同意我的担忧.

解决方法

if语句有效的唯一必要条件是布尔表达式.在这种情况下,因为=返回赋值的结果,实际测试的是会话[“devise.facebook_data”]的虚假性.

IntelliJ对于这样的代码抱怨很有意义,因为如果不了解Ruby的一两件事就难以阅读.建议是将其移至明确的赋值语句中.这具有额外的好处,即对其进行两次干燥.

class User < ActiveRecord::Base
  def self.new_with_session(params,session)
    super.tap do |user|
      data = session["devise.facebook_data"]
      if data && data["extra"]["raw_info"]
        user.email = data["email"] if user.email.blank?
      end
    end
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读