Ruby - 处理对象哈希

时间:2010-08-05 19:58:34

标签: ruby hash object

我有一个处理对象哈希的问题。我的哈希是玩家名称,对象也有一个属性@name

我正在尝试迭代多个玩家,并能够使用他们的方法等相当干净的代码。以下是我创建哈希的方法:

puts "Who all is playing?"
gets.split.each do |p|
    players[p] = Player.new(p)
end

然后我想像这样迭代这些玩家,但它不起作用。

players.each_key do |p_name, obj|
    puts obj.name + " turn"

然而,确实有效:

players.each_key do |p_name, obj|
    puts players[p_name].name + " turn"

在第一次尝试时,我得到一个obj为零的错误。有人可以解释为什么这不起作用,以及如何以我想要的方式做到这一点?

谢谢!

P.S。我所做的数组或哈希的正确术语是什么?我来自PHP,所以我认为它是一个数组(带有哈希),但从技术上讲它不是Ruby中的数组?

2 个答案:

答案 0 :(得分:3)

您想使用each_pair而非each_key。方法each_key仅为块提供一个参数,这是关键。因此,obj仍未绑定。另一方面,each_pair为您提供密钥和相应的值。

答案 1 :(得分:3)

  

P.S。我所做的数组或哈希的正确术语是什么?我来自PHP,所以我认为它是一个数组(带有哈希),但从技术上讲它不是Ruby中的数组?

它在Ruby中被称为Hash,它与数组不同。哈希是用:

创建的
my_hash = Hash.new

my_hash = {}

这样就完成了数组:

my_array = Array.new

my_array = []

Ruby哈希是associative arrays,就像PHP中的“数组”一样。 Ruby数组更像传统的“C”数组,因为它们用整数索引。