据我所知,Ruby 是唯一同时支持call/cc
和try/catch/finally
(写成begin/rescue/ensure/end
块)的主流语言。
我不熟悉 Ruby,但我的直觉告诉我这两者可能存在冲突,因为call/cc
允许任意控制流并ensure
需要一些有保证的控制流(某些代码路径必须在预定义的情况下执行,即离开包含堵塞)。
那么,语言中是否存在任何冲突?如果是这样,在这种情况下,语言的定义行为是什么?特别是,如果call/cc
在begin/ensure
块或块中使用会发生什么ensure/end
?如果call/cc
在块包含ensure
子句之后调用捕获怎么办?