Pregunta:
Si define una función con el argumento abort
, su función abortará tan pronto como se detecte un error. ¿Hay algún caso en el que esto no sea lo que querrías?
Incluso si su función necesita realizar una limpieza final, esperaría que usar finally
en combinación con abort
sería la mejor práctica, por ejemplo
function! Foo() abort
call s:make_mess()
try
call s:might_fail()
finally
call s:cleanup()
endtry
endfunction
¿Hay algún caso en el que realmente desee un comportamiento sin aborto?
Respuesta:
Discl .: Es solo una conjetura de mi parte.
abort
no existía cuando se introdujo la function
. Supongo que para no romper el código existente, se decidió no cambiar el comportamiento actual y proporcionar otro comportamiento solo cuando las funciones se anotan explícitamente.
Ahora bien, ¿dónde no deberíamos usarlo? No veo una buena razón. Incluso si una función no anotada continúa después de un error, observamos muchos mensajes de error molestos sobre declaraciones de control no balanceadas ( if
, while
…).
Cuando ejecuto un código que puede fallar, ¡prefiero ser explícito con silent!
, try...catch
o cualquier otro enfoque específico. Tengo muchos no abort
funciones -annotated, es sólo una señal de que son muy antiguos y que no les haya actualizado todavía.