ruby-on-rails – Rails:ENV.fetch()和ENV []之间的区别

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails:ENV.fetch()和ENV []之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这两种语法有什么区别:

ENV.fetch( “MY_VAR”)

ENV [ ‘MY_VAR’]

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

解决方法

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

Retrieves the value for environment variable name as a String. Returns nil if the named variable does not exist.

fine ENV#fetch manual

Retrieves the environment variable name.

If the given name does not exist and neither default nor a block a provided an IndexError is raised. If a block is given it is called with the missing name to provide a value. If a default value is given it will be returned when no block is given.

所以就像Hash#[]Hash#fetch一样,唯一的区别是fetch允许你指定如果找不到键的行为(使用传递给fetch的默认值,传递给fetch的默认块,或者引发异常)而[]只是默默地如果找不到密钥,则为零.

在具体情况下:

ENV.fetch("MY_VAR")
ENV['MY_VAR']

区别在于,如果没有MY_VAR环境变量,ENV [‘MY_VAR’]会给你nil,但ENV.fetch(‘MY_VAR’)会引发异常.

猜你在找的Ruby相关文章