В языке программирования Ruby каждый объект имеет как минимум один родительский класс. Однако большинство объектов имеют в цепочке наследования несколько классов. Каждый дочерний класс может переопределить метод, определенный в родительском.
Требуется написать метод
def location_in_hierarchy(object, method)
...
end
который будет принимать объект и метод и возвращать класс, в котором данный метод был впервые определен.
Подсказка:
Нужно создать массив, в котором будут содержаться названия классов в цепочке наследования для данного объекта. Массив должен начинаться с элемента object.class. Дальнейшие элементы - object.superclass. В вершине цепочки наследования находится BasicObject, для которого BasicObject.superclass равно nil.
Решение:
Источник: https://rubymonk.com
Требуется написать метод
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
Комментариев нет:
Отправить комментарий