在Ruby中重写JavaScript break-to-label
发布时间:2020-12-17 02:28:27 所属栏目:百科 来源:网络整理
导读:我正在将 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 (...) br
我正在将
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循环,和 据推测,这些的一般策略很好会让我通过其他情况,比如嵌套的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 解决方法
有多种技术可以用于此目的.
>我确信这已经发生在你身上,但是为了记录,你可以从噩梦函数中提取方法,直到它的结构看起来更合理. catch(:loop) do case ... when a throw :loop when b,c throw :loop if ... ... end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |