如何在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{}"]