Rails: ENV.fetch() と ENV[] の違い 質問する

Rails: ENV.fetch() と ENV[] の違い 質問する

次の 2 つの構文の違いは何ですか?

ENV.fetch("MY_VAR")

ENV['MY_VAR']

Rails 5 では、これら両方のバージョンをさまざまな場所で使用しているのを見てきましたが、違いがわかりません (最初のバージョンでは入力する文字数が多いこと以外は)。

ベストアンサー1

ハッシュのようなオブジェクトENVはRailsの一部ではなく、Rubyそのものです。細かいENV#[]マニュアル:

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

そしてその細かいENV#fetchマニュアル:

環境変数を取得しますname

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

だから、Hash#[]そしてHash#fetchとの唯一の違いは、 ではfetchキーが見つからない場合の動作を指定できる( に渡されるデフォルト値を使用するかfetch、 に渡されるデフォルト ブロックを使用するfetchか、例外を発生させる)のに対し、ではキーが見つからない場合は[]何も表示しないという点です。nil

具体的には、

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

違いは、環境変数がない場合には例外が発生するENV['MY_VAR']ことです。nilMY_VARENV.fetch('MY_VAR')

おすすめ記事