YAML 读取应该是哈希而不是数组,有什么问题?



我正在读取一个 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初始值设定项中出现错误。

当你调用 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" }]

最新更新