我在使用 #buy_fish
添加到实例的#pets
哈希时遇到问题。它成功返回要添加到哈希的内容,但哈希不会更改。
所有者类
class Owner
attr_accessor :name
def initialize(name)
pets
end
def pets
@pets = {cats: [], dogs: [], fishes: []}
end
def buy_fish(name)
self.pets[:fishes] << Fish.new(name)
end
end
鱼类类
class Fish
attr_reader :name
def initialize(name)
@name = name
end
end
@Matt的解决方案有效。
我只想补充一点,我认为没有理由在这里pets
评估应该懒惰。因此,您只需将其内联到构造函数中并添加一个读取器:
class Owner
attr_accessor :name
attr_reader :pets
def initialize(name)
@pets = {cats: [], dogs: [], fishes: []}
end
def buy_fish(name)
@pets[:fishes] << Fish.new(name)
end
end
正如Stefan指出的那样,每次调用pets
ass都会为@pets
分配一个新的哈希值。在宠物方法中添加||=
解决了这个问题。
法典
def pets
@pets ||= {cats: [], dogs: [], fishes: []}
end