Я действительно не понимая этого Ruby Monk exercise:Methods_added методов Singleton, но не методы класса
Там очень важный нюанс, который стоит понимать, когда дело с singleton_method_added и method_added.
Самый естественный способ, которым ум принимает эти два обратных вызова, состоит в том, чтобы предположить, что method_added будет наблюдать методы экземпляра и методы oneton_method_added, class. Это, однако, не совсем верно; Объект Singleton Ruby поддерживает обычные объекты и содержит изменения, специфичные для объекта. Для классов это методы класса. Но при добавлении метода к одному, регулярному объекту, добавление методов экземпляра только к этому объекту модифицирует одноэлементный объект для этого объекта.
Позвольте мне показать вам, почему, решив это упражнение.
Упражнение:
AN_OBJECT = Object.new
def AN_OBJECT.methods_added
@@methods_added ||= []
end
def AN_OBJECT.singleton_methods_added
@@singleton_methods_added ||= []
end
Моя попытка была сделать это:
def AN_OBJECT.methods_added
unless AN_OBJECT.is_a?(Class)
@@methods_added ||= []
end
end
def AN_OBJECT.singleton_methods_added
if AN_OBJECT.instance_of?(Object)
@@singleton_methods_added ||= []
end
end
Но данные по-прежнему терпят неудачу.
У меня действительно возникают проблемы, обертывая мою голову тем, что именно они хотят от меня. Что такое одноэлементный объект? Из того, что я понимаю, одноэлементный класс является своего рода «метаклассом», который существует исключительно для того, чтобы дать поведение определенному экземпляру класса.
Является ли одноэлементный объект своего рода «метаобъектом», который существует исключительно для того, чтобы дать поведение определенному экземпляру объекта? Это действительно сбивает меня с толку.
Я думаю, что это опечатка в книге и вместо этого следует читать «singleton class». –
Вижу, спасибо за разъяснение! – abustamam
@abustamam Можете ли вы пройти тест? –