[英]smalltalk error handling
我已經閱讀了一些初學者對smalltalk的介紹,並且有一個主題缺失。 這是錯誤處理。 怎么做? 對象會拋出某種異常嗎? 向某人發送一些錯誤消息?
提出異常:
MyException signal.
MyException signal: 'With an error message'.
處理異常:
[ 1 / 0 ] on: ZeroDivide do: [ Transcript showln: 'Oops! Zero divide!'].
要處理異常並使用一些異常信息:
[ 1 / 0 ] on: Error do:
[:e | Transcript showln: 'Oops! ' , e className , '!'].
確保總會發生一些事情( try finally
一次try finally
):
[ 1 / 0 ] ensure: [ Transcript showln: 'This will always run' ]
我只是想指出,除了@Frank Shearar提到的另一種可能性之外。 我的意思是設計。 現在讓調用者現在遇到什么麻煩更有用了。
#on:do:
是完全可以接受的,但大多數時候你不知道該把什么作為第一個參數。 block on: ?? do: something
block on: ?? do: something
。
讓我舉個例子。 實際上,Collection庫中有一個例子。 特別是關於字典。
aDict at: 4
如果4
不在字典中,會發生什么。 你只需得到一個簡單的錯誤,你需要抓住#on:do:
.
但有一種更好的方法來處理這種情況:
aDict at: 4 ifAbsent: [^#noSuchThingAs4]
你正在處理與#on:do:
相同的錯誤#on:do:
但是現在你知道了為什么。 所以你可以在其他方面做到這一點,以正確處理你的錯誤。
aConnection connectIfFailed: [ ^#maybeRetryHere ]
請注意,您需要將異常代碼放在一個塊中,以便在發生錯誤之前不會對其進行評估。
aDict at: 4 ifAbsentPut: self default
可能會奏效,但這是錯誤的。 希望對你有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.