如何在案例中“突破”……在Ruby中

所以,我试过break ,然后return 。 他们都会出错, exit当然有效,但完全退出。 那么,如何“结束一个case...when ”太快了?“

例:

 case x when y; begin   if something  end end 

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

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

出了什么问题:

 case x when y;  if !something  end end 

请注意, if !something是相同的, unless something

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

 def test_method  return if something  end case x when y test_method end 

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

 catch :exit do case x when y begin  throw :exit if something  end end end 

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

 case x when y begin  break if something  end while false end 

或者如果您愿意:

 case x when y 1.times do  break if something  end end