Наследовать переменные экземпляра уровня класса в Ruby?

Я хочу, чтобы дочерний класс наследовал переменную экземпляра уровня класса от своего родителя, но я не могу этого понять. По сути, я ищу такую ​​функциональность:

class Alpha
  class_instance_inheritable_accessor :foo #
  @foo = [1, 2, 3]
end

class Beta < Alpha
  @foo << 4
  def self.bar
    @foo
  end
end

class Delta < Alpha
  @foo << 5
  def self.bar
    @foo
  end
end

class Gamma < Beta
  @foo << 'a'
  def self.bar
    @foo
  end
end

И затем я хочу, чтобы это выводилось так:

> Alpha.bar
# [1, 2, 3]

> Beta.bar
# [1, 2, 3, 4]

> Delta.bar
# [1, 2, 3, 5]

> Gamma.bar
# [1, 2, 3, 4, 'a']

Очевидно, этот код не работает. В основном я хочу определить значение по умолчанию для переменных экземпляра уровня класса в родительском классе, которые наследуют его подклассы. Изменение в подклассе будет значением по умолчанию для подкласса. Я хочу, чтобы все это произошло без изменения значения одного класса, влияющего на его родителя или братьев и сестер. Class_inheritable_accessor дает именно то поведение, которое я хочу... но для переменной класса.

Мне кажется, я слишком многого прошу. Есть идеи?

19
задан Michael Durrant 6 June 2012 в 04:09
поделиться