Rails 3 - Как реорганизовать этот кусок кода? - PullRequest
1 голос
/ 27 апреля 2011

Я хотел бы реорганизовать этот фрагмент кода, который не является СУХИМЫМ:)

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]?

Ответы [ 3 ]

1 голос
/ 27 апреля 2011

Хеш вернет 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
0 голосов
/ 28 апреля 2011
def my_method
  h = session.fetch(:my_params, {})
  h[:answer] || h[:question]
end
0 голосов
/ 27 апреля 2011
def my_method
  session[:my_params][:answer] || session[:my_params][:question]
end

вернет nil, если ни того, ни другого нет.

Это, конечно, предполагает, что значения [:answer] и [:question] не являются преднамеренно ложными, например, false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...