4

我想创建一个基类来处理所有方法。在这种情况下,我将如何使用 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

预期的结果将是“品种好品种的好狗”提前谢谢你:)

4

2 回答 2

7
  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
于 2013-03-28T10:11:49.833 回答
2

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

于 2013-03-28T10:19:17.613 回答