我正在阅读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
我做错了什么?
答案 0 :(得分:1)
OpenStruct
initializer中出现错误。
当你调用Hash#each
并给它一个arity = 1的块时,该块会得到一个像[key, value]
这样的数组。然后,您将其传递给OpenStruct.new
,这会导致错误,因为您无法使用OpenStruct
初始化Array
。
我想要你想要的是:
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" }]