tryt catch-finally成语在smalltalk中

mil*_*lan 5 error-handling smalltalk try-catch-finally

你是如何在smalltalk中实现try-catch-finally成语的?我看到有on:do:ensure:,但没有on:do:ensure:.我肯定错过了什么.

mam*_*ing 6

您可以将#on:do块包装在另一个具有#ensure:的块中.


Est*_*nLM 5

如果您确实需要它,可以向BlockClosure添加协议:

#on: anErrorOrSet do: errorBlock ensure: finallyBlock
    [ self on: anErrorOrSet do: errorBlock ]
    ensure: finallyBlock
Run Code Online (Sandbox Code Playgroud)

这将表现得像try:catch:finally:on java.

这就是smalltalk的神奇之处(好吧,它的一小部分),如果你的需求不匹配,你可以随时扩展它:)