次の 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']
ことです。nil
MY_VAR
ENV.fetch('MY_VAR')