He leído algunas introducciones de principiante a smalltalk y hay un tema que falta. Es manejo de errores. ¿Cómo se hace? ¿Los objetos arrojan algún tipo de excepciones? ¿Enviar algunos mensajes de error a alguien?smalltalk error handling
Respuesta
Para elevar una excepción:
MyException signal.
MyException signal: 'With an error message'.
para manejar una excepción:
[ 1/0 ] on: ZeroDivide do: [ Transcript showln: 'Oops! Zero divide!'].
Para manejar una excepción y utilizar parte de la información de la excepción:
[ 1/0 ] on: Error do:
[:e | Transcript showln: 'Oops! ' , e className , '!'].
Para asegurar algo siempre sucede (a la try finally
):
[ 1/0 ] ensure: [ Transcript showln: 'This will always run' ]
Solo quiero señalar que junto al camino @Frank Shearar menciona que hay otra posibilidad. Quiero decir por diseño. En algún momento es más útil dejar que el que llama ahora qué problema está pasando.
El #on:do:
es perfectamente aceptable, pero la mayoría de las veces no sabes qué poner como primer argumento. block on: ?? do: something
.
Déjame un ejemplo. En realidad, hay un ejemplo de la biblioteca de Colección. Especialmente con respecto al diccionario.
aDict at: 4
¿Qué pasa si 4
no está en el diccionario. Acaba de obtener un error simple que necesita atrapar en un #on:do:
.
Pero hay una mejor manera de manejar esta situación:
aDict at: 4 ifAbsent: [^#noSuchThingAs4]
Estás manejar el error el mismo que el #on:do:
pero ahora usted sabe por qué. Entonces podría hacer eso en otro para manejar su error correctamente.
aConnection connectIfFailed: [ ^#maybeRetryHere ]
Tenga en cuenta que es necesario poner el código de excepción en un bloque de modo que no será evaluar hasta que ocurra el error.
aDict at: 4 ifAbsentPut: self default
pueden funcionar pero es incorrecto. Espero que te ayuden
Lea el capítulo 2 Pharo Por ejemplo: https://gforge.inria.fr/frs/download.php/26600/PBE2-Exceptions-2010-03-02.pdf
- 1. MVC Area Error Handling
- 2. extjs store error handling
- 3. Best practice Error handling
- 4. PHP DOMDocument error handling
- 5. Zend Framework Module error handling
- 6. ASP.NET MVC Global error handling
- 7. MySQL Stored Procedure Error Handling
- 8. Ruby on Rails -HTTP error handling
- 9. MVC Global error handling: Application_Error no dispara
- 10. Spring MVC Request body error handling
- 11. VBA Error Handling no funciona en Excel
- 12. jQuery Ajax 404 Handling
- 13. UpdatePanel Exception Handling
- 14. WinForms Global Exception Handling?
- 15. WCF Exception Handling
- 16. Monotouch Global Exception handling
- 17. PostgreSQL Exception Handling
- 18. unicorn timeout handling
- 19. C++ Exception Handling
- 20. Bash Pipe Handling
- 21. Spring @Resource Handling
- 22. Perl Handling Directorio Separadores
- 23. Jackson handling Elementos envueltos
- 24. LINQ Iterator Exception Handling
- 25. MVVM Exception Handling
- 26. Ajax Redirection Handling
- 27. TPL y Exception Handling
- 28. ¿Cuál es la diferencia de ANSI Smalltalk y Smalltalk-80?
- 29. ¿Tiene Smalltalk cierres?
- 30. Analizando RDF en Smalltalk
Buen punto: la gestión de errores de frecuencia al horno en las API en la forma ifAbsent. –