私は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しないときに人々が使用することを知っておく価値があります。