Sto imparando Ruby e ho incontrato la fail
parola chiave. Cosa significa?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
Sto imparando Ruby e ho incontrato la fail
parola chiave. Cosa significa?
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
efail "No user name set" unless username
Risposte:
In Ruby, fail
è sinonimo di raise
. La fail
parola chiave è un metodo del Kernel
modulo incluso nella classe Object
. Il fail
metodo genera un errore di runtime proprio come la raise
parola chiave.
Il fail
metodo ha tre overload:
fail
: solleva a RuntimeError
senza un messaggio di errore.
fail(string)
: solleva un RuntimeError
con l'argomento stringa come messaggio di errore:
fail "Failed to open file"
fail(exception [, string [, array]])
: solleva un'eccezione di classe exception
(primo argomento) con un messaggio di errore opzionale (secondo argomento) e informazioni di callback (terzo argomento).
Esempio: supponiamo di definire una funzione che dovrebbe fallire se viene fornito un argomento errato. È meglio sollevare una ArgumentError
e non una RuntimeError
:
fail ArgumentError, "Illegal String"
Un altro esempio: puoi passare l'intero backtrace al fail
metodo in modo da poter accedere alla traccia all'interno del rescue
blocco:
fail ArgumentError, "Illegal String", caller
caller
è un metodo del kernel che restituisce il backtrace come un array di stringhe nel modulo file:line: in 'method'
.
Senza argomenti, solleva l'eccezione in $! o solleva un'eccezione RuntimeError se $! è nullo. Con un singolo argomento String, solleva un'eccezione RuntimeError con la stringa come messaggio. In caso contrario, il primo parametro dovrebbe essere il nome di una classe Exception (o un oggetto che restituisce un oggetto Exception quando viene inviato un messaggio di eccezione). Il secondo parametro facoltativo imposta il messaggio associato all'eccezione e il terzo parametro è una matrice di informazioni di callback. Le eccezioni vengono rilevate dalla clausola di salvataggio dei blocchi di inizio ... fine.
raise
Rubocop dice sull'uso di entrambe le parole;
"Utilizzare
fail
invece diraise
per segnalare eccezioni.""Utilizzare
raise
invece difail
rilanciare le eccezioni."
Ecco un esempio.
def sample
fail 'something wrong' unless success?
rescue => e
logger.error e
raise
end
fail
== raise
In altre parole, fail
è solo un popolare alias per raise
il metodo di generazione degli errori. Utilizzo:
fail ArgumentError, "Don't argue with me!"
www.ruby-doc.org è tuo amico. Quando ho cercato su Google rubydoc fail
" Kernel " è stato il primo successo. Il mio consiglio è, in caso di dubbio, di andare alla fonte definitiva per cose definitive come questa.
raise
quando gestiscono le eccezioni efail
quando no.