tryt catch-finally成语在smalltalk中

时间:2011-10-20 18:24:30

标签: error-handling smalltalk try-catch-finally

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

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

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

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

表现就像try:catch:finally:on java。

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

答案 2 :(得分:1)

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

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

查看Exception的所有子类,了解您可以捕获的异常类型。

希望它有所帮助!

答案 3 :(得分:1)

这就是你几乎可以在所有Smalltalk方言中开箱即用的方法。

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

或者您可以将BlockClosure扩展为@EstebanLM推荐。