如何在smalltalk中实现try-catch-finally习惯用法?我看到有on:do:和ensure:,但没有on:do:ensure:。我一定漏掉了什么。
发布于 2011-10-21 03:48:38
您可以将#on:do块包装在附加了#ensure:的另一个块中。
发布于 2011-10-21 19:52:40
如果您真的需要它,您可以向BlockClosure添加一个协议:
#on: anErrorOrSet do: errorBlock ensure: finallyBlock
[ self on: anErrorOrSet do: errorBlock ]
ensure: finallyBlock它的行为就像java上的try:catch: will:。
这就是smalltalk的魔力(好吧,只是其中的一小部分),如果没有满足您的需求,您可以随时扩展它:)
发布于 2011-10-21 16:28:20
我不确定我是否理解了你的问题,但如果我理解了,你的意思是“如果一个异常被触发,如何处理它,否则如何继续正常的执行”,这是你可以做的:
[self doWhatever] on: SomeException do: [self handleSomeException].
self continueNormally.查看Exception的所有子类,看看您可以捕获哪些类型的异常。
希望它能帮上忙!
https://stackoverflow.com/questions/7840392
复制相似问题