我有这个哈希$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中的符号数组,并在需要时引用它?这似乎是出于某种原因欺骗我......
答案 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}