散列缺失值,抛出异常

时间:2012-05-06 16:02:38

标签: ruby

我有一个看起来像这样的哈希:

items:
    item:
        attribute_a: cheese
        attribute_b: bacon
    item:
        attribute_a: salmon
    item:
        attribute_a: mushrooms
        attribute_b: steak

我想得到attribute_b的值,我正在使用以下内容:

if (result['attribute_b'])
  // do something
end

但如果缺少attribute_b,我会收到错误:

The Identifier specified does not exist, undefined method '[] for nil:NilClass'

检查attribute_b是否存在的(最佳)正确方法是什么?

2 个答案:

答案 0 :(得分:2)

看起来您在访问属性'attribute_b'时没有收到错误,但因为result为零。

The Identifier specified does not exist, undefined method [] for nil:NilClass`

它说你在零值上调用方法[]。您唯一要拨打的电话' []'是result

您访问'attribute_b'的方式通常是可以接受的 - 我可能会更具体并说:

if (result && result.has_key? 'attribute_b')
 // do something
end

这将确保result存在并确保该属性不为null。

答案 1 :(得分:0)

首先,你的YAML结构看起来很糟糕(是YAML吗?)。您不能使用密钥item包含多个具有多个元素的哈希,因为密钥必须是唯一的。你应该使用数组。

我建议你按照这里的方式构建YAML:

items:
  -
    attribute_a: cheese
    attribute_b: bacon
  -
    attribute_a: salmon
  -
    attribute_a: mushrooms
    attribute_b: steak

然后你可以做

require 'yaml'
result = YAML.load(File.open 'foo.yml')
result['items'][0]['attribute_b']
=> "bacon"