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?
有什么不对:
case x
when y;
<code here>
if !something
<more code>
end
end
Run Code Online (Sandbox Code Playgroud)
注意与之if !something相同unless something
我看到了几个可能的解决方案。首先,您可以在某个方法中定义指令块:
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)