你如何实现smalltalk中的try-catch-finally成语?我看到有on:do:
和ensure:
,但没有on:do:ensure:
。我一定错过了什么。
答案 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推荐。