2016-09-20 104 views
0

我是新来的红宝石,并提前道歉,因为我强烈怀疑我错过了这里真正明显的东西。但..如何存储从哈希动态创建的对象?

我想基于哈希数组动态地创建对象。但是,我如何存储对象?

如果我创建只有一个,我会做一个变量赋值,象这样:

h = PuppetNode.new(hash) 
print h.hostname # foo.bar.com 

但怎么样?:这里

array_of_hashes.each { | hash | 
    h = PuppetNode.new(hash) 
} 

这将导致“H”对象被覆盖不会吗? 我想我可以尝试从哈希中提取某些内容以动态地命名该变量,但似乎这是不必要的,因为各种实例变量标出了每个对象的独特性。

我真的需要使用变量吗?如果不是,我如何创建/存储对象。如果是这样,我怎样才能动态地设置变量名称而不痛苦的正则表达式使用?

在此先感谢

+0

你想要什么输出是完全的,我不清楚。 – Anthony

+0

(在我的代码示例中更正了错误)想象一下'array_of_hashes'是三个哈希值。我如何得到三个对象,我可以用我在第一个例子中的相同方式引用它,其中h.hostname – spoovy

+1

'nodes = array_of_hashes.map {| hash | PuppetNode.new(hash)}'会产生一个'PuppetNode'对象数组。然后你可以通过'p nodes [0] .hostname'来访问它们。 – Anthony

回答

1

如果你想存储多个对象,你可以使用一个集合对象做到这一点。 Ruby带有内置于核心库中的两种集合对象:Array(可由数字索引寻址的元素的线性序列)和Hash(从关键对象到值对象的映射,可由关键字寻址)。在标准库中,还有其他种类的收集对象,如Set (a collection that tracks membership of values) and SortedSet