Подтвердить что ты не робот

Как "сломать" из футляра... пока в Ruby

Итак, я пробовал break, next и return. Все они дают ошибки, exit, конечно, работает, но это полностью выходит. Итак, как бы закончить a case...when "слишком скоро?"

Пример:

case x
    when y; begin
        <code here>
        < ** terminate somehow ** > if something
        <more code>
    end
end

(Вышеприведенная часть представляет собой некоторую форму псевдокода, чтобы дать общее представление о том, что я прошу [begin... end был использован с надеждой на то, что break будет работать].

И, пока я нахожусь, есть ли более элегантный способ передачи блоков в case...when?

4b9b3361

Ответ 1

Что случилось с:

case x
when y;
    <code here>
    if !something
        <more code>
    end
end

Обратите внимание, что if !something совпадает с unless something

Ответ 2

Я вижу пару возможных решений. Сперва вы можете определить свой блок инструкций внутри некоторого метода:

def test_method
  <code here>
  return if something
  <more code>
end

case x
  when y
    test_method
end

С другой стороны, вы можете использовать catch-throw, но я считаю его более уродливым и нерубивным способом:)

catch :exit do
  case x
    when y
      begin
        <code here>
        throw :exit if something
        <more code>
      end
  end
end

Ответ 3

Здесь ответ, подобный методу WarHog, дал:

case x
when y
    begin
        <code here>
        break if something
        <more code>
    end while false
end

или если вы предпочитаете:

case x
when y
    1.times do
        <code here>
        break if something
        <more code>
    end
end