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

Que*_*tin 3 ruby inheritance class

我想创建一个基类来处理所有方法.在这种情况下,如何使用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
Run Code Online (Sandbox Code Playgroud)

预期的结果将是"品种良好品种的好狗",谢谢你提前:)

Dog*_*ert 5

  1. self.class.first_name不做你可能想做的事.你需要@first_name直接使用.

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

这有效:

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
Run Code Online (Sandbox Code Playgroud)