无法添加到实例的哈希(红宝石)



我在使用 #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

最新更新