89

Rubyを学んでいてfailキーワードに出会いました。どういう意味ですか?

if password.length < 8
   fail "Password too short"
end
unless  username
   fail "No user name set"
end
4

4 に答える 4

141

Ruby では、failと同義raiseです。failキーワードはKernelクラスに含まれるモジュールのメソッドですObject。このメソッドは、キーワードfailと同様に実行時エラーを発生させます。raise

failメソッドには 3 つのオーバーロードがあります。

  • fail:RuntimeErrorエラーメッセージなしで a を発生させます。

  • fail(string):RuntimeErrorエラー メッセージとして文字列引数を使用して a を発生させます。

    fail "Failed to open file"
    
  • fail(exception [, string [, array]])exception:オプションのエラー メッセージ (2 番目の引数) とコールバック情報 (3 番目の引数) を指定して、クラス (最初の引数) の例外を発生させます。

    例: 不適切な引数を指定すると失敗する関数を定義するとします。ArgumentErrorではなくを発生させる方が良いですRuntimeError:

    fail ArgumentError, "Illegal String"
    

    別の例:ブロック内のトレースにアクセスできるように、バックトレース全体をメソッドに渡すことができます。failrescue

    fail ArgumentError, "Illegal String", caller
    

    callerバックトレースを形式の文字列の配列として返すカーネルメソッドfile:line: in 'method'です。

引数なしで、$! で例外を発生させます。$! の場合は RuntimeError を発生させます。はゼロです。String 引数を 1 つ指定すると、その文字列をメッセージとして RuntimeError を発生させます。それ以外の場合、最初のパラメーターは Exception クラス (または例外メッセージが送信されたときに Exception オブジェクトを返すオブジェクト) の名前にする必要があります。オプションの 2 番目のパラメーターは例外に関連付けられたメッセージを設定し、3 番目のパラメーターはコールバック情報の配列です。例外は、begin...end ブロックのレスキュー句によってキャッチされます。

出典:カーネル モジュールの Ruby ドキュメント

于 2013-09-15T11:20:44.003 に答える
33

Rubocopは、両方の単語の使用法について述べています。

「例外を通知するfail代わりに使用します。」raise

「例外を再スローするraise代わりに使用します。」fail

ここに例があります。

def sample
  fail 'something wrong' unless success?
rescue => e
  logger.error e
  raise
end
于 2015-11-11T12:33:42.573 に答える
26

fail==raise

言い換えれば、エラーを発生させるメソッドfailの一般的なエイリアスにすぎません。raise使用法:

fail ArgumentError, "Don't argue with me!"
于 2013-09-15T11:17:52.137 に答える
7

www.ruby-doc.orgはあなたの友達です。ググったらrubydoc failKernel」が最初にヒットしました。私のアドバイスは、疑わしい場合は、このような定義的なものの決定的な情報源に行くことです.

于 2013-09-15T15:28:17.303 に答える