如何在案例中"突破"......在Ruby中

omn*_*nse 13 ruby switch-statement control-flow

所以,我试过了break,next而且return.它们都会出错,exit当然有效,但完全退出.那么,一个人怎么会case...when"太快"?

例:

case x
    when y; begin
        <code here>
        < ** terminate somehow ** > if something
        <more code>
    end
end
Run Code Online (Sandbox Code Playgroud)

(上面是某种形式的伪代码,只是为了给出我所要求的一般概念[开始...结束时使用了希望break可行].

而且,虽然我在这里,是否有更优雅的方式传递块case...when

Gar*_*eth 7

有什么不对:

case x
when y;
    <code here>
    if !something
        <more code>
    end
end
Run Code Online (Sandbox Code Playgroud)

注意与之if !something相同unless something


War*_*Hog 5

我看到了几个可能的解决方案。首先,您可以在某个方法中定义指令块:

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

case x
  when y
    test_method
end
Run Code Online (Sandbox Code Playgroud)

另一方面,您可以使用catch-throw,但我相信它更丑陋且非 ruby​​ 方式:)

catch :exit do
  case x
    when y
      begin
        <code here>
        throw :exit if something
        <more code>
      end
  end
end
Run Code Online (Sandbox Code Playgroud)


小智 5

这是一个类似于WarHog给出的技术的答案:

case x
when y
    begin
        <code here>
        break if something
        <more code>
    end while false
end
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢:

case x
when y
    1.times do
        <code here>
        break if something
        <more code>
    end
end
Run Code Online (Sandbox Code Playgroud)