Поведение метода класса во время наследования - PullRequest
0 голосов
/ 18 ноября 2009
class A
  #define class level attribute called key
  class << self
    attr_accessor :key
  end
end

class B < A
end

B.key = "foo"
B.key # returns "foo"
A.key # returns nil

.

Каков подход, если я хочу, чтобы A.key вернул "foo" в приведенном выше сценарии?

Ответы [ 2 ]

1 голос
/ 18 ноября 2009

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

class A
  def self.key
    @@key
  end

  def self.key=(new_val)
    @@key = new_val
  end
end
0 голосов
/ 18 ноября 2009

Методы класса не могут быть виртуальными. Такова жизнь. Когда у вас есть класс, у вас нет виртуальной таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...