1

我有这个 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

随着时间的推移,新的对 from$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"]

不起作用。这整个计划是个坏主意吗?我是否应该将 Embryo 散列变成 $chicken_parts 中的符号数组,并在需要时引用它?出于某种原因,这对我来说似乎是在作弊......

4

2 回答 2

3

这里有点混乱。当您merge!在 grow_part 中时,您不会将一: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
于 2013-06-23T14:33:59.690 回答
-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}
于 2013-06-23T14:39:40.867 回答