这两种语法的区别是什么:
ENV.fetch("MY_VAR")
ENV['MY_VAR']
我看到Rails 5在不同的地方使用了这两个版本,但不知道区别是什么(除了第一个版本需要输入更多字符).
这两种语法的区别是什么:
ENV.fetch("MY_VAR")
ENV['MY_VAR']
我看到Rails 5在不同的地方使用了这两个版本,但不知道区别是什么(除了第一个版本需要输入更多字符).
ENV
散列类对象是纯Ruby,不是Rails的一部分.从fine ENV#[]
manual人中:
以字符串形式检索环境变量
name
的值.如果命名变量不存在,则返回nil
.
检索环境变量
name
.如果给定的名称不存在,并且
default
或块a都不存在,则会引发索引器.如果给定了一个块,则会用缺少的名称调用它以提供一个值.如果给定了默认值,则在未给定块时将返回该值.
所以就像Hash#[]
和Hash#fetch
一样,唯一的区别是fetch
允许您指定未找到键时的行为(使用传递给fetch
的默认值、传递给fetch
的默认块或引发异常),而[]
只是在未找到键时默默地给出nil
.
在具体情况下:
ENV.fetch("MY_VAR")
ENV['MY_VAR']
不同之处在于,如果没有MY_VAR
环境变量,ENV['MY_VAR']
将给出nil
,但ENV.fetch('MY_VAR')
将引发异常.