4

すべてのメソッドを処理する基本クラスを作成したいと思います。このシナリオでルビーを使用してこれを達成するにはどうすればよいですか?

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_nameLab.first_nameLab のインスタンスではなく、 を意味しますlb.first_name

于 2013-03-28T10:19:17.613 に答える