Estoy aprendiendo Ruby y encontré la failpalabra 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 failpalabra 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 < 8yfail "No user name set" unless username
Respuestas:
En Ruby, failes sinónimo de raise. La failpalabra clave es un método del Kernelmódulo incluido por la clase Object. El failmétodo genera un error en tiempo de ejecución al igual que la raisepalabra clave.
El failmétodo tiene tres sobrecargas:
fail: genera un RuntimeErrorsin mensaje de error.
fail(string): genera un RuntimeErrorcon 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 ArgumentErrory no un RuntimeError:
fail ArgumentError, "Illegal String"
Otro ejemplo: puede pasar todo el retroceso al failmétodo para poder acceder al rastro dentro del rescuebloque:
fail ArgumentError, "Illegal String", caller
calleres 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
faillugar deraisepara señalar excepciones'.'Usar en
raiselugar defailvolver 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, failes solo un alias popular para el raisemé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.
raisecuando maneja excepciones yfailcuando no.