понедельник, 1 декабря 2014 г.

Определить первый родительский класс

В языке программирования Ruby каждый объект имеет как минимум один родительский класс. Однако большинство объектов имеют в цепочке наследования несколько классов. Каждый дочерний класс может переопределить метод, определенный в родительском.
Требуется написать метод
def location_in_hierarchy(object, method)
...
end
который будет принимать объект и метод и возвращать класс, в котором данный метод был впервые определен.

Подсказка:
Нужно создать массив, в котором будут содержаться названия классов в цепочке наследования для данного объекта. Массив должен начинаться с элемента object.class. Дальнейшие элементы - object.superclass. В вершине цепочки наследования находится BasicObject, для которого BasicObject.superclass равно nil.

Решение:
def location_in_hierarchy(object, method)
  cls = object.class
  ancestors = [cls]
  while !(superclass = cls.superclass).nil?
    ancestors << superclass
    cls = superclass
  end
  ancestors.reverse.find do |klass|
    klass.instance_methods.include? method
  end
end

Источник: https://rubymonk.com

Комментариев нет:

Отправить комментарий