Rails:ENV.fetch()和ENV []之间的区别

时间:2017-12-27 02:32:54

标签: ruby-on-rails ruby ruby-on-rails-5

这两种语法有什么区别:

ENV.fetch("MY_VAR")

ENV['MY_VAR']

我已经看到Rails 5在不同的地方使用这两个版本,并且无法弄清楚区别是什么(除了第一个更多的字符要输入)。

1 个答案:

答案 0 :(得分:24)

ENV类似哈希的对象是纯Ruby,不是Rails的一部分。来自fine ENV#[] manual

  

以字符串形式检索环境变量name的值。如果命名变量不存在,则返回nil

fine ENV#fetch manual

  

检索环境变量name

     

如果给定的名称不存在且既没有提出default也没有提供块a,则会引发IndexError。如果给出一个块,则使用缺少的名称调用它以提供值。如果给出了默认值,则在没有给出块时将返回该值。

就像Hash#[]Hash#fetch一样,唯一的区别是fetch允许您指定未找到密钥时的行为(使用传递给{{1的默认值) ,默认阻止传递给fetch,或者引发异常)而如果找不到密钥,fetch只会默默地给你[]

在具体案例中:

nil

不同之处在于,如果没有ENV.fetch("MY_VAR") ENV['MY_VAR'] 环境变量,ENV['MY_VAR']将为您nil,但MY_VAR会引发异常。