【发布时间】:2011-02-14 01:04:05
【问题描述】:
我正在将 a JavaScript library 移植到 Ruby,并且遇到了以下精神错乱(严重缩写):
function foo(){
if (foo) ...
loop:
while(go()){
if (...) break;
switch(...){
case a:
break loop;
case b:
case c:
if (...) break loop;
...
break;
case d:
if (...) break loop;
// fall through
case e:
if (...) break loop;
...
break;
case f:
if (...) break loop;
object_init:
do{
switch(...){
case a:
...
break;
case b:
...
break object_init;
}
} while(...);
...
break;
}
}
}
(您可以查看完整的恐怖on lines 701-1006。)
你会如何用 Ruby 重写它?具体来说:
- 处理混合的
break和break loop,以及 - 处理交换机中偶尔发生的“失败”
据推测,一个很好的通用策略可以让我度过其他情况,比如嵌套的 object_init 中断也会发生。
编辑:我真傻;像这样的 JavaScript “失败”:
switch(xxx){
case a:
aaa;
case b:
bbb;
break;
}
在 Ruby 中可以很容易地改写为:
case xxx
when a, b
if a===xxx
aaa
end
bbb
end
【问题讨论】:
-
@jleedev 谢谢;没能找到。在这种情况下,Throw/catch 似乎是一种有效的技巧。
标签: javascript ruby break