0

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

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存在的(最佳)正确方法是什么?

4

2 回答 2

2

看起来好像不是在访问属性时收到错误'attribute_b',而是因为result是 nil。

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

它是说你在[]nil 值上调用该方法。您唯一调用“ []”的是result

一般来说,您访问的方式'attribute_b'是可以接受的——我可能会更具体地说:

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

这将确保result存在以及确保属性不为空。

于 2012-05-06T16:07:50.373 回答
0

首先,您的 YAML 结构看起来很糟糕(是 YAML 吗?)。您不能有一个包含多个元素的散列 key item,因为 key 必须是唯一的。您应该改用数组。

我建议您在此处按照以下方式构建 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"
于 2012-05-06T16:12:41.003 回答