gpt4 book ai didi

ruby - 为什么单个 `=` 在 `if` 语句中起作用?

转载 作者:数据小太阳 更新时间:2023-10-29 06:58:25 26 4
gpt4 key购买 nike

此代码作为与 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 语句有效,唯一必需的是 bool 表达式。在这种情况下,由于 = 返回赋值的结果,因此实际测试的是 session["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

关于ruby - 为什么单个 `=` 在 `if` 语句中起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30768362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com