YAML 读取应该是哈希而不是数组,有什么问题吗?
YAML read should be an Hash not an Array, what's wrong?
我正在读取 YAML 文件:
listing = YAML.load_file(File.expand_path(....)
我尝试在构建 OpenStructure 时迭代列表项
items = Array.new
listing.each do |item|
items << OpenStruct.new(item)
end
但是它引发了一个错误:
undefined method `each_pair' for ["item1", "label1"]:Array (NoMethodError)
我的测试 YAML 文件是:
item1: label1
item2: label2
我做错了什么?
错误发生在 OpenStruct
initializer。
当您调用 Hash#each
并给它一个 arity = 1 的块时,该块会得到一个类似于 [key, value]
的数组。然后你将它传递给 OpenStruct.new
,这会导致错误,因为你无法用 Array
.
初始化 OpenStruct
我认为你想要的是:
listing.each do |key, value|
items << OpenStruct.new({ key: value })
end
或者,yaml 文件可以是
- item1: label1
- item2: label2
我相信代码会按原样工作。
您拥有的 YAML 文件被反序列化为:
{ item1: "label1", item2: "label2" }
而我所描述的是:
[{ item1: "label1" }, { item2: "label2" }]
我正在读取 YAML 文件:
listing = YAML.load_file(File.expand_path(....)
我尝试在构建 OpenStructure 时迭代列表项
items = Array.new
listing.each do |item|
items << OpenStruct.new(item)
end
但是它引发了一个错误:
undefined method `each_pair' for ["item1", "label1"]:Array (NoMethodError)
我的测试 YAML 文件是:
item1: label1
item2: label2
我做错了什么?
错误发生在 OpenStruct
initializer。
当您调用 Hash#each
并给它一个 arity = 1 的块时,该块会得到一个类似于 [key, value]
的数组。然后你将它传递给 OpenStruct.new
,这会导致错误,因为你无法用 Array
.
OpenStruct
我认为你想要的是:
listing.each do |key, value|
items << OpenStruct.new({ key: value })
end
或者,yaml 文件可以是
- item1: label1
- item2: label2
我相信代码会按原样工作。
您拥有的 YAML 文件被反序列化为:
{ item1: "label1", item2: "label2" }
而我所描述的是:
[{ item1: "label1" }, { item2: "label2" }]