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

问题描述 投票:7回答:1

这两种语法有什么区别:

ENV.fetch("MY_VAR")

ENV['MY_VAR']

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

ruby-on-rails ruby ruby-on-rails-5
1个回答
33
投票

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

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

fine ENV#fetch manual

检索环境变量name

如果给定的名称不存在,并且default和块a都没有提供,则会引发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')会引发异常。

© www.soinside.com 2019 - 2024. All rights reserved.