如何在Ruby中将子类变量返回到父类中

时间:2013-03-28 10:07:58

标签: ruby class inheritance

我想创建一个基类来处理所有方法。在这种情况下,如何使用ruby实现这一目标?

class Dog
  def initialize
    @breed = "good breed"
  end

  def show_dog
    puts "#{self.class.first_name} of breed #{@breed}"
  end
end

class Lab < Dog

  attr_reader :first_name
  def initialize
    @first_name = "good dog"
  end
end

lb = Lab.new()
lb.show_dog

预期结果将是品种良好品种的好狗#34; 提前谢谢你:)

2 个答案:

答案 0 :(得分:5)

  1. self.class.first_name没有做你想做的事。您需要直接使用@first_name

  2. 您需要从子类调用父类的构造函数;它不是自动调用的。

  3. 这有效:

    class Dog
      def initialize
        @breed = "good breed"
      end
    
      def show_dog
        puts "#{@first_name} of breed #{@breed}" ### <- Changed
      end
    end
    
    class Lab < Dog
    
      attr_reader :first_name
      def initialize
        super ### <- Added
        @first_name = "good dog"
      end
    end
    
    lb = Lab.new()
    lb.show_dog
    

答案 1 :(得分:2)

self.class.first_name表示Lab.first_name,而不是Lab的实例lb.first_name