Переменная экземпляра класса недоступна для дочернего класса?
Я хочу использовать методы класса для дочерних классов в 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