私がこれまでに知っているように、Ruby は(ブロックとして記述された)call/cc
との両方をサポートする唯一の主流言語です。try/catch/finally
begin/rescue/ensure/end
私はRubyに精通していませんが、直感的に、call/cc
任意の制御フローを許可しensure
、保証された制御フローを必要とするため、その2つの潜在的な競合があることを教えてくれます(一部のコードパスは、事前に定義された状況で実行する必要があります。ブロック)。
それで、言語に矛盾はありますか?もしそうなら、そのような場合の言語の定義された動作は何ですか? 特に、ブロックやブロックcall/cc
で使用されている場合はどうなりますか? ブロックの contains句の後にキャプチャを呼び出すとどうなりますか?begin/ensure
ensure/end
call/cc
ensure