【发布时间】:2015-02-20 18:47:19
【问题描述】:
我的任务是从 ruby 数据结构中表达如下的 YAML 结构:
- a
- b
- a
- include:
name: test
- include:
name: test2
我尝试了以下方法:
require "json"
#=> true
require "yaml"
#=> true
array = ["a","b","a","include" => {"name"=>"test"}]
#=> ["a", "b", "a", {"include"=>{"name"=>"test"}}]
puts JSON.parse(array.to_json).to_yaml
#---
#- a
#- b
#- a
#- include:
# name: test
#=> nil
所以这看起来我在正确的轨道上。但是当我简单地将另一个哈希条目添加到数组中时,我得到以下信息:
array = ["a","b","a","include" => {"name"=>"test"}, "include" => {"name"=>"test2"}]
#(irb):23: warning: duplicated key at line 23 ignored: "include"
#=> ["a", "b", "a", {"include"=>{"name"=>"test2"}}]
puts JSON.parse(array.to_json).to_yaml
#---
#- a
#- b
#- a
#- include:
# name: test2
#=> nil
这让我很困惑。数组的条目不应该相互独立吗?为什么 Ruby 将最后两个条目合并为一个哈希?如果可能的话,我该怎么做才能用 ruby 数据结构创建给定的 YAML 结构(如果这是一个愚蠢的问题,我很抱歉,但我是 Ruby 初学者)?
【问题讨论】:
-
你有 duplicate 键,这是不允许的。你需要有唯一的名字。你有
includetwice。跨度> -
我看到 ruby 认为我有重复的键。但我认为这是错误的。两个“include”只是数组中的两个条目,与两个“a”相同。但是 ruby 将它们视为属于一个哈希值。这真是令人困惑。
-
哦!好吧,那我可能误会了。 :)
-
为什么人们不赞成这样的问题?
-
我不知道.. 我不知道.. 但不是问题,有时好的答案也会受到一些无意义的人的攻击。别管他们!