Переменная экземпляра класса недоступна для дочернего класса?

Я хочу использовать методы класса для дочерних классов в ruby, но те, которые полагаются на дочерние переменные экземпляра, не работают. Мне сказали "не используйте переменные класса! (@@)", так что я нет. Как я могу сделать класс B делай что хочу, а именно распечатай "1"?

class A
  @a = "1"

  def initialize
    self.class.what_is_a
  end

  def self.what_is_a
    p @a
  end
end

class B < A
end


A.what_is_a
B.what_is_a
A.new
B.new

Выход:

"1"
nil
"1"
nil

Я бы хотел, чтобы они все были "1",

1 ответ

Использование защищенных методов

class A   
  def initialize
    self.class.what_is_a
  end

  def self.what_is_a
    puts a
  end

  protected 

  def self.a
    '1'
  end
end

class B < A
end


A.what_is_a # >> 1
B.what_is_a # >> 1
A.new # >> 1
B.new # >> 1
Другие вопросы по тегам