これら2つの構文の違いは何ですか?
ENV.fetch("MY_VAR")
ENV['MY_VAR']
Rails 5はこれらの両方のバージョンを異なる場所で使用し、違いが何であるかを理解できません(最初の1つが入力する文字が多いことを除いて)。
ENV
のハッシュに似たオブジェクトはプレーンなRubyであり、Railsの一部ではありません。 fine _ENV#[]
_ manual から:
環境変数
name
の値を文字列として取得します。名前付き変数が存在しない場合はnil
を返します。
および fine _ENV#fetch
_ manual :
環境変数
name
を取得します。指定された名前が存在せず、
default
もブロックもない場合、IndexErrorが発生します。ブロックが指定されている場合、値を提供するために欠落している名前で呼び出されます。デフォルト値が指定されている場合、ブロックが指定されていないときに返されます。
つまり、 _Hash#[]
_ と _Hash#fetch
_ のように、fetch
を使用すると、キーが見つからない(fetch
に渡されるデフォルト値を使用する、fetch
に渡されるデフォルトブロックを使用する、または例外を発生させる)一方で、_[]
_は単にnil
キーが見つかりません。
特定の場合:
_ENV.fetch("MY_VAR")
ENV['MY_VAR']
_
違いは、_ENV['MY_VAR']
_環境変数がない場合、_MY_VAR
_はnil
を提供しますが、ENV.fetch('MY_VAR')
は例外を発生させます。