Как я могу выпрыгнуть из двойного блока «если»? - PullRequest
0 голосов
/ 15 мая 2018

У меня есть некоторый код, который выглядит следующим образом:

if condition A
  if condition A.1
    # do something
  elsif condition A.2
    # do something_else
  else 
    # (want to jump out condition A)
  end 
  # (do something after either A.1 or A.2)
end

Я хочу выпрыгнуть из двойного блока if, если ни A.1, ни A.2 не верны;в противном случае он попытается выполнить код после внутреннего блока if, что приведет к ошибке.Я пробовал next и break, но ни один не работает.Что мне делать?

Ответы [ 5 ]

0 голосов
/ 15 мая 2018

Я чувствую, что есть намного более аккуратный способ сделать это, изменив условия на более рубиновые:

if condition_a && (condition_a_1 || condition_a_2)
  do_something if condition_a_1
  do_something_else if condition a_2
  do_something_after_a_1_or_a_2
end

Тогда есть функции для do_somethings

0 голосов
/ 15 мая 2018

Лучшим решением для вас является корпус переключателя

0 голосов
/ 15 мая 2018

Используйте catch, throw конструкцию, подобную этой:

catch :from_inner do
  if condition A
    if condition A.1
      # ...
    elsif condition A.2
      # ...
    else 
      throw :from_inner
    end 
    # ...
  end
end
0 голосов
/ 15 мая 2018

Просто измените свою структуру if:

 if condition A
  if condition A.1
    do something
  elsif condition A.2
    do something_else
  end 
  if A.1 || A.2
    (do something after either A.1 or A.2)
  end
end

Это может быть невозможно из-за соображений производительности, но в большинстве случаев должно работать.В качестве альтернативы вы можете переместить do something after в отдельную функцию и вызвать ее из обоих случаев.

0 голосов
/ 15 мая 2018

Лучший способ - вставить эти строки в новый метод, а return из него.Проблема решена, с более короткими методами.

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