2017-12-27 11 views
1

の違いこれらの二つの構文の違いは何ですか:レール:ENV.fetch()およびENV []

ENV.fetch("MY_VAR")

ENV['MY_VAR']

が、私はRailsの5の使用にこれらの両方のバージョンを見てきました違いが何であるかを知ることはできません(最初の文字は入力する文字数が異なります)。

+0

あなたの質問は不明です。あなたは明示的に*構文*について尋ねるが、構文を全く説明しない答えを受け入れ、*セマンティクスについてのみ話す*。 –

+0

@JörgWMittag質問をしたときに誰もが辞書に相談するわけではありません。あなたは英語のコマンドを表示する必要がある場合は、あなた自身の答えを提供することを歓迎します。 –

答えて

9

ハッシュのようなオブジェクトはRubyであり、Railsの一部ではありません。 fine ENV#[] manualから:

文字列などの環境変数nameの値を取得します。指定された変数が存在しない場合はnilを返します。

fine ENV#fetch manual

は、環境変数nameを取得します。

与えられた名前が存在せず、defaultもブロックaも指定されていない場合、IndexErrorが発生します。ブロックが与えられている場合は、値を提供するために欠落した名前で呼び出されます。デフォルト値が与えられている場合は、ブロックが与えられていないときに返されます。

だからHash#[]Hash#fetchのように、唯一の違いは、fetchあなたは鍵が見つからない場合(動作を指定fetchに渡さfetchに渡されたデフォルト値、デフォルトのブロックを使用するか、例外を発生することを可能にするということです)、[]は、キーが見つからない場合、ただ暗黙のうちにnilを与えます。特定の場合には

ENV.fetch("MY_VAR") 
ENV['MY_VAR'] 

違いは何MY_VAR環境変数が存在しない場合ENV['MY_VAR']はあなたにnilを与えるだろうが、ENV.fetch('MY_VAR')は例外を発生させるということです。

+0

この答えは 'ENV :: fetch'と' ENV :: [] 'の*セマンティクス*について説明していますが、質問は明示的に*構文*について質問します。 –

関連する問題