我讀過一些初學者對smalltalk的介紹,並且有一個主題缺失。這是錯誤處理。它是如何完成的?對象是否會拋出某種異常?向某人發送一些錯誤消息?smalltalk錯誤處理
8
A
回答
19
引發異常:
MyException signal.
MyException signal: 'With an error message'.
處理異常:
處理異常和使用的一些異常的信息:
[ 1/0 ] on: Error do:
[:e | Transcript showln: 'Oops! ' , e className , '!'].
爲了確保東西總是發生(a la try finally
):
[ 1/0 ] ensure: [ Transcript showln: 'This will always run' ]
5
我只想指出,除了@Frank Shearar之外,還有其他的可能性。我的意思是設計。有時讓主叫方現在發生什麼麻煩會更有用。
#on:do:
是完全可以接受的,但大多數時候你不知道該把什麼作爲第一個參數。 block on: ?? do: something
。
讓我來舉個例子吧。實際上,Collection庫有一個例子。特別是關於字典。
aDict at: 4
這裏發生了什麼,如果4
不在字典中。你只是得到一個普通的錯誤,你需要趕上#on:do:
。
但是有一個更好的方式來處理這種情況:
aDict at: 4 ifAbsent: [^#noSuchThingAs4]
您是處理錯誤一樣#on:do:
但現在你知道爲什麼。 所以你可以在其他方面做到這一點,以妥善處理你的錯誤。
aConnection connectIfFailed: [ ^#maybeRetryHere ]
請注意,您需要將異常代碼放在塊中,以便在發生錯誤之前不會對其進行評估。
aDict at: 4 ifAbsentPut: self default
可能工作,但它是錯誤的。希望能幫到你。
0
相關問題
- 1. Smalltalk如何處理程序錯誤?
- 2. Smalltalk語法錯誤
- 3. 處理錯誤
- 4. 錯誤處理
- 5. 處理錯誤
- 6. 處理錯誤
- 7. 處理錯誤
- 8. 錯誤處理
- 9. 錯誤處理
- 10. 處理錯誤
- 11. 處理錯誤
- 12. 處理 - 錯誤
- 13. Smalltalk/Squeak消息處理方法
- 14. Smalltalk中的事件處理(吱吱聲)
- 15. Smalltalk如何處理數據庫?
- 16. 輸入異常處理無效 - SmallTalk
- 17. Node.js錯誤處理
- 18. 處理Java錯誤
- 19. WCF - 錯誤處理
- 20. PHP:FOPEN錯誤處理
- 21. Asynctask錯誤處理
- 22. PHP處理錯誤
- 23. Retrofit2:錯誤處理
- 24. 處理OLAP錯誤
- 25. 處理NoReverse錯誤
- 26. Perl錯誤處理
- 27. PHP錯誤處理
- 28. 錯誤處理$ q.all()
- 29. NServiceBus錯誤處理
- 30. BigQuery錯誤處理
好一點:錯誤處理的往往烤成的ifAbsent方式的API。 – 2011-01-29 20:25:19