Представьте, что мы имеем три класса:рубин метапрограммирования получить контейнер класс переменного экземпляра из метода экземпляра
class SomeClass
def container_class
# ...
end
end
class Container
attr_accessor :property
end
class Container2
attr_accessor :lalala
end
# now I create instances
p = SomeClass.new
c = Container.new
c.property = p
c.property.container_class # => should return Container
c2 = Container2.new
c2.lalala = p
c2.lalala.container_class # => should return Container2
Вопрос: Как я могу написать метод container_class с помощью рубинового метапрограммирования так он возвращает класс контейнера (композиция), например откуда этот метод называется?
Вы можете использовать только метапрограммирование. Контейнерные классы не следует изменять вручную.
Что вы просите, невозможно. Рассмотрим этот случай: 'p = SomeClass.new; c.property = p; c2.property = p'. Что бы сделать «container_class» в этом случае? – Max
Макс, возврат Контейнер первый раз и Контейнер2 второй раз – kajamite
@bloodthirsty_ruby_god Это делает * без чувства *. Теперь вы хотите отслеживать, сколько раз метод вызывается и каждый раз возвращать другой результат? – meagar