簡體   English   中英

smalltalk錯誤處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM