smalltalk中的Try-catch-finally习语



如何在smalltalk中实现try-catch-finally习语?我看到有on:do:ensure:,但是没有on:do:ensure:

你可以将#on:do块包装在另一个带有#ensure:的块中

如果你真的需要的话,你可以给BlockClosure添加一个协议:

#on: anErrorOrSet do: errorBlock ensure: finallyBlock
    [ self on: anErrorOrSet do: errorBlock ]
    ensure: finallyBlock

的行为就像java上的try:catch:finally:

这就是smalltalk的神奇之处(好吧,只是它的一小部分),如果没有匹配您的需要,您可以随时扩展它:)

我不确定我是否理解你的问题,但如果我这样做了,你的意思是"如何处理异常,如果它被触发并继续正常执行",这就是你可以做的:

[self doWhatever] on: SomeException do: [self handleSomeException].
self continueNormally.

查看Exception的所有子类,看看可以捕获哪些类型的异常。

希望有帮助!

在几乎所有的Smalltalk方言中都可以这样写。

[[ "try{}" ] 
    on: Error 
    do: [:ex | "catch{}"]]
        ensure: ["finally{}"]

相关内容

  • 没有找到相关文章

最新更新