Estou aprendendo Ruby e encontrei a failpalavra - 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 failpalavra - 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 < 8efail "No user name set" unless username
Respostas:
Em Ruby, failé sinônimo de raise. A failpalavra-chave é um método do Kernelmódulo incluído pela classe Object. O failmétodo gera um erro de tempo de execução, assim como oraise palavra chave.
O failmétodo tem três sobrecargas:
fail: gera um RuntimeErrorsem uma mensagem de erro.
fail(string): levanta um RuntimeErrorcom 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 ArgumentErrore não um RuntimeError:
fail ArgumentError, "Illegal String"
Outro exemplo: você pode passar todo o backtrace para o failmétodo para que possa acessar o trace dentro do rescuebloco:
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
failvez deraisepara sinalizar exceções.''Use em
raisevez defailpara 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 raisemé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.
raiseao lidar com exceções efailquando não.