¿Cuál es la diferencia entre generar una excepción en TCL a través de return -code error ...
y error ...
? ¿Cuándo se usaría uno en lugar del otro?¿Cuál es la diferencia entre el error del código de retorno y el error
5
A
Respuesta
5
El comando error
produce un error justo en el punto actual; es ideal para los casos en que está generando un problema debido al estado interno de un procedimiento. El comando return -code error
hace que el procedimiento en el que se coloca produzca un error (como si el procedimiento fuera error
); es genial para el caso donde hay un problema con los argumentos pasados al procedimiento (es decir, la persona que llama hizo algo mal). La diferencia realmente viene cuando observas el rastro de la pila.
Aquí hay un ejemplo (ideado!):
proc getNumberFromFile {filename} {
if {![file readable $filename]} {
return -code error "could not read $filename"
}
set f [open $filename]
set content [read $f]
close $f
if {![regexp -- {-?\d+} $content number]} {
error "no number present in $filename"
}
return $number
}
catch {getNumberFromFile no.such.file}
puts $::errorInfo
#could not read no.such.file
# while executing
#"getNumberFromFile no.such.file"
catch {getNumberFromFile /dev/null}
puts $::errorInfo
#no number present in /dev/null
# while executing
#"error "no number present in $filename""
# (procedure "getNumberFromFile" line 9)
# invoked from within
#"getNumberFromFile /dev/null"
Cuestiones relacionadas
- 1. ¿Cuál es la diferencia entre el error de tiempo de ejecución y el error del compilador?
- 2. ¿Cuál es la diferencia entre -objectRegisteredForID: y -existingObjectWithID: error :?
- 3. ¿Cuál es la diferencia entre VBScript's y el operador &?
- 4. ¿Cuál es la diferencia entre el código de compilación y el código ejecutable?
- 5. ¿Cuál es la diferencia entre el mango y el hilo?
- 6. ¿cuál es la diferencia entre el objetivo y el proyecto?
- 7. ¿Cuál es la diferencia entre el código inseguro y el código no administrado en C#?
- 8. ¿Cuál es la diferencia entre el menú de opciones y el menú del panel en Android?
- 9. Backbone.Js - ¿Cuál es la diferencia entre el y $ el?
- 10. ¿Cuál es la diferencia entre el NSImage y el UIImage?
- 11. ¿Cuál es la diferencia entre el JSP y el JSTL?
- 12. ¿Cuál es la diferencia entre el tenedor y el hilo?
- 13. ¿Cuál es la diferencia entre el marco y la arquitectura?
- 14. ¿Cuál es la diferencia entre el
- 15. ¿Cuál es la diferencia entre el código de ensamblaje y el bytecode?
- 16. ¿Cuál es la diferencia entre el colado y la coerción?
- 17. Cuál es la diferencia entre el retorno; y regresar undef; en Perl
- 18. ¿Cuál es la diferencia entre el código nativo, el código de máquina y el código de ensamblaje?
- 19. cuál es la diferencia entre las plantillas y el polimorfismo
- 20. ¿cuál es la diferencia entre el complemento y la biblioteca?
- 21. ¿cuál es la diferencia entre el material y la textura?
- 22. ¿Cuál es la diferencia entre el casting y la conversión?
- 23. ¿Cuál es la diferencia entre la tubería y el zócalo?
- 24. ¿Cuál es la diferencia entre el formato OMF y COFF?
- 25. ¿cuál es la diferencia entre net.tcp y el protocolo TCP?
- 26. ¿cuál es la diferencia entre:.! y: r !?
- 27. Cuál es la diferencia entre $ y jQuery
- 28. ¿Cuál es la diferencia entre dict() y {}?
- 29. Cuál es la diferencia entre httpconnection en J2ME y HttpUrlConnection en Android (http error 401)
- 30. ¿Cuál es la diferencia entre el nuevo operador y Class.newInstance()?
También hay diferencias si utiliza 'catch' dentro del procedimiento para atrapar a los dos casos diferentes, pero que está consiguiendo mucho más compleja. –
Probablemente también vale la pena mencionar que desde Tcl 8.5 'return' aprendió la opción' -level' que podría usarse para generar un error en algún lugar más arriba de la pila, que puede usarse al implementar comandos complejos personalizados (usualmente pretendiendo formar una DSL) 'error' no puede hacer eso. – kostix