我想重构这段根本不是DRY的代码:)
def my_method
if session[:my_params].try(:include?, :answer)
session[:my_params][:answer]
elsif session[:my_params].try(:include?, :question)
session[:my_params][:question]
end
end
是否可以隐式返回:answer
或:question
,具体取决于session[:my params]
中存在哪一个(如果存在)?
答案 0 :(得分:1)
如果某个键没有关联的值,则哈希将返回nil
。由于nil
和false
在条件句中的处理方式相同,因此我们可以非常积极地缩短此方法。 if session[:my_params]
确保session[:my_params]
不是零。
def my_method
session[:my_params][:answer] || session[:my_params][:question] if session[:my_params]
end
答案 1 :(得分:0)
def my_method
session[:my_params][:answer] || session[:my_params][:question]
end
如果两者都不存在,将返回nil
。
这当然假设[:answer]
和[:question]
值并非故意错误,例如false
。
答案 2 :(得分:0)
def my_method
h = session.fetch(:my_params, {})
h[:answer] || h[:question]
end