私はRubyを学んでいて、fail
キーワードに遭遇しました。どういう意味ですか?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
私はRubyを学んでいて、fail
キーワードに遭遇しました。どういう意味ですか?
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
およびfail "No user name set" unless username
回答:
Rubyでは、fail
はと同義raise
です。fail
キーワードはの方法であって、Kernel
クラスに含まれるモジュールObject
。このfail
メソッドは、raise
キーワードと同じようにランタイムエラーを発生させます。
このfail
メソッドには3つのオーバーロードがあります。
fail
:RuntimeError
エラーメッセージなしでを発生させます。
fail(string)
:RuntimeError
エラーメッセージとして文字列引数でaを発生させます:
fail "Failed to open file"
fail(exception [, string [, array]])
:exception
オプションのエラーメッセージ(2番目の引数)とコールバック情報(3番目の引数)を使用して、クラス(最初の引数)の例外を発生させます。
例:悪い引数が与えられた場合に失敗するはずの関数を定義するとします。を上げるのArgumentError
ではなく、を上げる方が良いですRuntimeError
:
fail ArgumentError, "Illegal String"
別の例:バックトレース全体をfail
メソッドに渡して、rescue
ブロック内のトレースにアクセスできるようにすることができます。
fail ArgumentError, "Illegal String", caller
caller
は、バックトレースを文字列の配列として形式で返すカーネルメソッドfile:line: in 'method'
です。
引数がない場合、$で例外が発生します!または$!の場合、RuntimeErrorを発生させます。ゼロです。単一のString引数を使用すると、文字列をメッセージとしてRuntimeErrorが発生します。それ以外の場合、最初のパラメーターは、Exceptionクラス(または例外メッセージが送信されたときにExceptionオブジェクトを返すオブジェクト)の名前である必要があります。オプションの2番目のパラメーターは、例外に関連付けられたメッセージを設定し、3番目のパラメーターはコールバック情報の配列です。例外は、begin ... endブロックのrescue句によってキャッチされます。
raise
Rubocopは両方の単語の使用法について述べています。
「
fail
代わりにraise
を使用して、例外を通知します。」「
raise
代わりに使用して、fail
例外を再スローします。」
これが例です。
def sample
fail 'something wrong' unless success?
rescue => e
logger.error e
raise
end
fail
== raise
言い換えれば、fail
はraise
エラー発生方法の一般的な別名です。使用法:
fail ArgumentError, "Don't argue with me!"
www.ruby-doc.orgはあなたの友達です。私がグーグルで検索したとき、rubydoc fail
「カーネル」が最初のヒットでした。私のアドバイスは、疑わしい場合は、このような定義的なものの決定的な情報源に行くことです。
raise
例外を処理するときと処理fail
しないときに人々が使用することを知っておく価値があります。