Rob*_*Rob 7 ruby hash ruby-on-rails
如果我尝试访问不存在的哈希元素,我会得到NoMethodError: undefined method '[]' for nil:NilClass.但是,我无法预测哪些元素会出现.
@param_info = {}
@param_info["drug"]["name"]
# => NoMethodError: undefined method `[]' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
如果元素意外出现,如何避免引发此错误nil?
use*_*951 10
Ruby 2.3.0引入了一个名为dig on 的新方法Hash,Array它完全解决了这个问题.
nil如果在任何嵌套级别缺少元素,它将返回.
h1 = {}
h2 = { a: {} }
h3 = { a: { b: 100 } }
h1.dig(:a, :b) # => nil
h2.dig(:a, :b) # => nil
h3.dig(:a, :b) # => 100
Run Code Online (Sandbox Code Playgroud)
您的用例如下所示:
@param_info.dig('drug', 'name')
Run Code Online (Sandbox Code Playgroud)
如果我正确理解您的问题,即在遗漏属性值的情况下使其宽容,那么您可以尝试以下方法:
@param_info.try(:fetch, :drug).try(:fetch, :name)
Run Code Online (Sandbox Code Playgroud)
这可能nil也会返回,但这将消除错误undefined methods '[]' for nil:NilClass
更新:
为了处理不存在的密钥,您可以尝试以下方法.(从等效的尝试获得这个提示):
@param_info.try(:[], :drug).try(:[], :name)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2536 次 |
| 最近记录: |