Ruby:在yaml文件中创建数据时遇到问题

Ruby:在yaml文件中创建数据时遇到问题,ruby,Ruby,如何组织yml文件中的数据,以便在需要时可以从中访问x=>1、y=>1和z=>2 我只想写一次“1”。需要“yaml” require 'yaml' yaml = <<YAML --- :x: &a 1 :y: *a :z: 2 YAML puts YAML.load(yaml) # => {:x=>1, :y=>1, :z=>2} yaml=1,:y=>1,:z=>2} 根据YAML规范: 3.2.2.2。锚和别名 在表示图中,一个节点可能出

如何组织yml文件中的数据,以便在需要时可以从中访问x=>1、y=>1和z=>2

我只想写一次“1”。

需要“yaml”
require 'yaml'

yaml = <<YAML
---
:x: &a 1
:y: *a
:z: 2
YAML

puts YAML.load(yaml)
# => {:x=>1, :y=>1, :z=>2}
yaml=1,:y=>1,:z=>2}
根据YAML规范:

3.2.2.2。锚和别名

在表示图中,一个节点可能出现在多个集合中。序列化此类数据时,节点的第一次出现由锚点标识。每个后续事件都被序列化为一个别名节点,该节点引用回该锚点。否则,锚点名称是一个序列化细节,一旦编写完成就会被丢弃。从序列化事件构成表示图时,别名节点指序列化中具有指定锚的最新节点。因此,锚点在序列化中不必是唯一的。此外,锚点不需要有引用它的别名节点。因此,可以为序列化中的所有节点提供锚点


这里,
&a
:x
键下的值的锚
*a
是一个别名,它使
:y
键的值成为同一个对象。

您可以展开您的问题吗?很多什么是
x
y
a
z
c
,如果它们是变量?如果它们不是变量,就不是正确的Ruby,所以很难理解您的意思。另外,如果你的意思是我认为你的意思,唯一不重用键
a
的方法是
y
引用
x
,这可能不是你想要的。x、 y和z是可变的。a和c是像a是1,c是2一样的值。所以x=>1,y=>1和z=>2我觉得这里有些东西没有被理解。为什么你不能直接做YAML.dump({x=>a,y=>a,z=>c})?你是说
{x=>1,“y=>1,”z=>2}
还是说
{:x=>1,:y=>1,:z=>2}
?如果不是,那么我仍然不知道你的意思。解释一下这个构造(即引用和锚定)可能会更好。