这两个语法之间有什么区别:
ENV.fetch("MY_VAR")
ENV['MY_VAR']
我已经看到Rails 5在不同的地方使用这些版本的两个版本,并且无法弄清楚什么是区别(除了第一个字符是更多字符以外)。
ENV
hash样对象是普通的红宝石,而不是导轨的一部分。从精细的ENV#[]
手册中:
将环境变量
name
的值作为字符串检索。返回nil
如果命名变量不存在。
和精细的ENV#fetch
手册:
检索环境变量
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')
会引起异常。