¿Cómo se da cuenta de un idioma try-catch-finally en smalltalk? Veo que hay on:do:
y ensure:
, pero no hay on:do:ensure:
. Debo estar perdiendo algo.try-catch-finally modismo en smalltalk
Respuesta
Puede ajustar el bloque #on: do en otro bloque que tenga #ensure: conectado.
No estoy seguro de haber entendido su pregunta, pero si lo hiciera y que quería decir "¿cómo se puede controlar una excepción si se activa y continuar la ejecución normal de lo contrario", esto es lo que puede hacer:
[self doWhatever] on: SomeException do: [self handleSomeException].
self continueNormally.
Consulte todas las subclases de Excepción para ver qué tipo de excepciones puede capturar.
Espero que haya sido útil.
El bloque finally no solo se ejecuta cuando la ejecución continúa normalmente sino también cuando una excepción desenrolla la pila como Smalltalk #ensure :. Ver otras respuestas –
Si realmente lo necesita, se puede añadir un protocolo para BlockClosure:
#on: anErrorOrSet do: errorBlock ensure: finallyBlock
[ self on: anErrorOrSet do: errorBlock ]
ensure: finallyBlock
que se comporta exactamente igual que intento de captura: por último: en java.
Esa es la magia de Smalltalk (bueno, una pequeña parte de ella), si no hay ninguna coincidencia para sus necesidades, siempre se puede extender :)
Así es como se puede escribir fuera de la caja en casi todos los dialectos de Smalltalk.
[[ "try{}" ]
on: Error
do: [:ex | "catch{}"]]
ensure: ["finally{}"]
O puede ampliar BlockClosure como @EstebanLM recomendado.
- 1. Analizando RDF en Smalltalk
- 2. Responsabilidad individual en smalltalk
- 3. Any Smalltalk en .NET?
- 4. R modismo para switch/case
- 5. bloques Smalltalk en Objective-c?
- 6. ¿Cuál es la diferencia de ANSI Smalltalk y Smalltalk-80?
- 7. ¿Comenzarías a aprender Smalltalk?
- 8. Smalltalk y IoC
- 9. Cadena para enterrar Smalltalk
- 10. ¿Tiene Smalltalk cierres?
- 11. smalltalk error handling
- 12. Bloque en Ruby en comparación con Smalltalk
- 13. ¿Por qué debería usarse el modismo "PIMPL"?
- 14. ¿Qué es un modismo de programación?
- 15. Imágenes o archivos en GNU Smalltalk?
- 16. Envío de correo zodiac en Pharo smalltalk
- 17. ¿Pueden los operadores en Smalltalk estar sobrecargados?
- 18. comunicación entre imágenes en Smalltalk. ¿Posible?
- 19. ¿Diferencia entre nueva e inicialización en Smalltalk?
- 20. Squeak Smalltalk flecha vertical en el código
- 21. Persistencia de datos en Smalltalk/Seaside
- 22. Smalltalk Learning Project: ¿Alguna recomendación?
- 23. ¿Cómo maneja Smalltalk con monkeypatching?
- 24. Actividad actual de desarrollo Smalltalk
- 25. ¿Diferencias entre Smalltalk y python?
- 26. ¿Dónde se usa Smalltalk-80?
- 27. ¿El modismo de pimpl se usa en C#?
- 28. ¿Control de versión para Smalltalk/Seaside?
- 29. Biblioteca de teoría de gráficos para Smalltalk
- 30. ¿Dónde se ha ido el archivo Smalltalk?
Ah de hecho. Lo pensé pero de alguna manera pensé que ejecutaría el bloque interno dos veces, porque tanto #on: do: y #ensure: send #value. – milan
'#ensure:' el envío de '# value' evaluará su contenido, que enviará' #on: do: 'a su contenido, que a su vez enviará' # value' al bloque más interno, que finalmente haz algo útil. En otras palabras, los dos envíos '# value' se envían a diferentes bloques. –