Sto imparando Ruby e ho incontrato la failparola 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 failparola 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 < 8efail "No user name set" unless username
Risposte:
In Ruby, failè sinonimo di raise. La failparola chiave è un metodo del Kernelmodulo incluso nella classe Object. Il failmetodo genera un errore di runtime proprio come la raiseparola chiave.
Il failmetodo ha tre overload:
fail: solleva a RuntimeErrorsenza un messaggio di errore.
fail(string): solleva un RuntimeErrorcon 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 ArgumentErrore non una RuntimeError:
fail ArgumentError, "Illegal String"
Un altro esempio: puoi passare l'intero backtrace al failmetodo in modo da poter accedere alla traccia all'interno del rescueblocco:
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
failinvece diraiseper segnalare eccezioni.""Utilizzare
raiseinvece difailrilanciare 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 raiseil 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.
raisequando gestiscono le eccezioni efailquando no.