Win*_*ker 18 ruby ruby-on-rails ruby-on-rails-5
这两种语法有什么区别:
ENV.fetch("MY_VAR")
ENV['MY_VAR']
我已经看到Rails 5在不同的地方使用这两个版本,并且无法弄清楚区别是什么(除了第一个更多的字符要输入).
mu *_*ort 41
类似ENV哈希的对象是纯Ruby,不是Rails的一部分.从精细ENV#[]手册:
name以String形式检索环境变量的值.nil如果指定的变量不存在,则返回.
检索环境变量
name.如果给定的名称不存在,并且既
default没有提供块也没有提供一个IndexError.如果给出一个块,则使用缺少的名称调用它以提供值.如果给出了默认值,则在没有给出块时将返回该值.
所以就像Hash#[]和Hash#fetch,唯一的区别是,fetch如果找不到密钥(使用传递给默认值,传递fetch默认块fetch或引发异常),则允许您指定行为,而如果密钥是'n' 则[]只是默默地给出nil找到了.
在具体情况下:
ENV.fetch("MY_VAR")
ENV['MY_VAR']
Run Code Online (Sandbox Code Playgroud)
不同之处在于,如果没有环境变量但会引发异常ENV['MY_VAR']会给你.nilMY_VARENV.fetch('MY_VAR')