Estoy aprendiendo Ruby y encontré la fail
palabra clave. Qué significa eso?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
Estoy aprendiendo Ruby y encontré la fail
palabra clave. Qué significa eso?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
fail "Password too short" if password.length < 8
yfail "No user name set" unless username
Respuestas:
En Ruby, fail
es sinónimo de raise
. La fail
palabra clave es un método del Kernel
módulo incluido por la clase Object
. El fail
método genera un error en tiempo de ejecución al igual que la raise
palabra clave.
El fail
método tiene tres sobrecargas:
fail
: genera un RuntimeError
sin mensaje de error.
fail(string)
: genera un RuntimeError
con el argumento de cadena como mensaje de error:
fail "Failed to open file"
fail(exception [, string [, array]])
: genera una excepción de clase exception
(primer argumento) con un mensaje de error opcional (segundo argumento) e información de devolución de llamada (tercer argumento).
Ejemplo: suponga que define una función que debería fallar si se le da un argumento incorrecto. Es mejor plantear un ArgumentError
y no un RuntimeError
:
fail ArgumentError, "Illegal String"
Otro ejemplo: puede pasar todo el retroceso al fail
método para poder acceder al rastro dentro del rescue
bloque:
fail ArgumentError, "Illegal String", caller
caller
es un método de Kernel que devuelve el backtrace como una matriz de cadenas en el formulario file:line: in 'method'
.
Sin argumentos, plantea la excepción en $! o genera un RuntimeError si $! es nulo. Con un solo argumento String, genera un RuntimeError con la cadena como mensaje. De lo contrario, el primer parámetro debe ser el nombre de una clase de excepción (o un objeto que devuelve un objeto de excepción cuando se envía un mensaje de excepción). El segundo parámetro opcional establece el mensaje asociado con la excepción y el tercer parámetro es una matriz de información de devolución de llamada. Las excepciones están incluidas en la cláusula de rescate de los bloques begin ... end.
raise
Rubocop dice sobre el uso de ambas palabras;
'Úselo en
fail
lugar deraise
para señalar excepciones'.'Usar en
raise
lugar defail
volver a lanzar excepciones'.
Aquí hay un ejemplo.
def sample
fail 'something wrong' unless success?
rescue => e
logger.error e
raise
end
fail
== raise
En otras palabras, fail
es solo un alias popular para el raise
método de generación de errores. Uso:
fail ArgumentError, "Don't argue with me!"
www.ruby-doc.org es tu amigo. Cuando busqué en Google, rubydoc fail
" Kernel " fue el primer éxito. Mi consejo es, en caso de duda, acudir a la fuente definitiva para obtener información sobre definiciones como esta.
raise
cuando maneja excepciones yfail
cuando no.