Я хотел бы реорганизовать этот фрагмент кода, который не является СУХИМЫМ:)
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]?
:answer
:question
session[:my params]
Хеш вернет nil, если ключ не имеет значения, связанного с ним.Поскольку nil и false обрабатываются одинаково в условных выражениях, мы можем очень агрессивно сократить этот метод.if session[:my_params] гарантирует, что session[:my_params] не ноль.
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
def my_method h = session.fetch(:my_params, {}) h[:answer] || h[:question] end
def my_method session[:my_params][:answer] || session[:my_params][:question] end
вернет nil, если ни того, ни другого нет.
Это, конечно, предполагает, что значения [:answer] и [:question] не являются преднамеренно ложными, например, false.
[:answer]
[:question]