如何访问哈希中的元素,哈希本身就是哈希值?

时间:2013-06-23 14:27:54

标签: ruby hash

我有这个哈希$chicken_parts,它由符号/哈希对组成(比这里显示的更多):

$chicken_parts = { :beak = > {"name"=>"Beak", "color"=>"Yellowish orange", "function"=>"Pecking"}, :claws => {"name"=>"Claws", "color"=>"Dirty", function"=>"Scratching"} }

然后我有一个类Embryo,它有两个特定于类的哈希:

class Embryo

@parts_grown = Hash.new

@currently_developing = Hash.new

随着时间的推移,来自$chicken_parts的新对将.merge!加入@parts_grown。在不同的时间,@currently developing将被声明为等于@parts_grown中的一个符号/哈希对。

我正在创建Embryo类函数,我希望能够访问"name"中的"color""function"@currently_developing值,但我不知道似乎能够做到。

def grow_part(part)
  @parts_grown.merge!($chicken_parts[part])
end

def develop_part(part)
  @currently_developing = @parts_grown[part]

似乎按预期填充哈希值,但

puts @currently_developing["name"]

不起作用。整个计划是个坏主意吗?我是否应该将胚胎哈希变成$ chicken_parts中的符号数组,并在需要时引用它?这似乎是出于某种原因欺骗我......

2 个答案:

答案 0 :(得分:3)

这里有点混乱。当您在grow_part中merge!时,您无法向:beak => {etc...}添加@parts_grown对。相反,您正在合并部件名称指向的哈希值,并将该哈希值的所有字段直接添加到@parts_grown。因此,在grow_part之后,@parts_grown可能如下所示:

{"name"=>"Beak", "color"=>"Yellowish orange", "function"=>"Pecking"}

我不认为这就是你想要的。相反,请尝试grow_part

def grow_part(part)
  @parts_grown[part] = $chicken_parts[part]
end

答案 1 :(得分:-1)

class Embryo
  @parts_grown = {a: 1, b: 2}

  def show
    p @parts_grown
  end

  def self.show
    p @parts_grown
  end
end

embryo = Embryo.new
embryo.show
Embryo.show

--output:--
nil
{:a=>1, :b=>2}