首页 > 解决方案 > 红宝石。如何从所有类对象中收集所有类元素?

问题描述

我有一个任务,我有老班和小班。这是简化的代码:

 class Animal
  attr_accessor :name, :name_list

  def initialize
    @name = name
    @name_list = []

  end
  
  def set_name
    @name = gets
    puts "My name is #{@name}"
    @name_list.append(@name)
  end

  def self.show_all
    puts "List of your animals names: #{@name_list}"
  end
end

class Dog < Animal

end

class Cat < Animal

end


dog1 = Dog.new
dog1.set_name
cat1 = Cat.new
cat1.set_name
Animal.show_all

所以问题是:如果所有子类(猫和狗)都具有相同的元素 - 名称(动物类中的位置),我如何将它们全部收集到一个数组中?因为如果我只是将 name_list 放入 set_name def - 数组似乎是空的。有没有办法在不写类之外的另一个数组的情况下做到这一点?

标签: rubyoop

解决方案


您需要创建name_list一个类变量

class Animal
  attr_accessor :name
  @@name_list = []

  def initialize
    @name = name
  end

 def set_name
   @name = gets
   puts "My name is #{@name}"
   @@name_list.push(@name.strip)
 end

 def self.show_all
   puts "List of your animals names: #{@@name_list}"
 end
end

推荐阅读