В языке программирования 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
Комментариев нет:
Отправить комментарий