导轨:Env.fetch()和Env []之间的差异



这两个语法之间有什么区别:

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')会引起异常。

最新更新