Estou aprendendo Ruby e encontrei a fail
palavra - chave. O que isso significa?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
Estou aprendendo Ruby e encontrei a fail
palavra - chave. O que isso 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
Respostas:
Em Ruby, fail
é sinônimo de raise
. A fail
palavra-chave é um método do Kernel
módulo incluído pela classe Object
. O fail
método gera um erro de tempo de execução, assim como oraise
palavra chave.
O fail
método tem três sobrecargas:
fail
: gera um RuntimeError
sem uma mensagem de erro.
fail(string)
: levanta um RuntimeError
com o argumento string como uma mensagem de erro:
fail "Failed to open file"
fail(exception [, string [, array]])
: levanta uma exceção de classe exception
(primeiro argumento) com uma mensagem de erro opcional (segundo argumento) e informações de retorno de chamada (terceiro argumento).
Exemplo: suponha que você defina uma função que deve falhar se for fornecido um argumento incorreto. É melhor criar um ArgumentError
e não um RuntimeError
:
fail ArgumentError, "Illegal String"
Outro exemplo: você pode passar todo o backtrace para o fail
método para que possa acessar o trace dentro do rescue
bloco:
fail ArgumentError, "Illegal String", caller
caller
é um método Kernel que retorna o backtrace como um array de strings no formulário file:line: in 'method'
.
Sem argumentos, levanta a exceção em $! ou aumenta um RuntimeError se $! é nulo. Com um único argumento String, gera um RuntimeError com a string como uma mensagem. Caso contrário, o primeiro parâmetro deve ser o nome de uma classe Exception (ou um objeto que retorna um objeto Exception ao enviar uma mensagem de exceção). O segundo parâmetro opcional define a mensagem associada à exceção e o terceiro parâmetro é uma matriz de informações de retorno de chamada. As exceções são capturadas pela cláusula de resgate dos blocos begin ... end.
Fonte: Documentação Ruby no Módulo Kernel .
raise
Rubocop fala sobre o uso de ambas as palavras;
'Use em
fail
vez deraise
para sinalizar exceções.''Use em
raise
vez defail
para relançar exceções.'
Aqui está um exemplo.
def sample
fail 'something wrong' unless success?
rescue => e
logger.error e
raise
end
fail
== raise
Em outras palavras, fail
é apenas um apelido popular para raise
método de levantamento de erros. Uso:
fail ArgumentError, "Don't argue with me!"
www.ruby-doc.org é seu amigo. Quando eu pesquisei rubydoc fail
" Kernel " foi o primeiro hit. Meu conselho é, em caso de dúvida, vá para a fonte definitiva de coisas de definição como esta.
raise
ao lidar com exceções efail
quando não.