[Ruby] Q: module_eval
Yuri Leikind
y.leikind на sam-solutions.net
Пн Сен 20 12:11:43 MSD 2004
On Mon, 20 Sep 2004 10:12:35 +0400
"Alexey I. Froloff" <raorn на immo.ru> wrote:
> Использую ruby-activeldap, он создаёт классы примерно следующим
> образом:
>
> class Base
> def Base.create_object(config={})
> [...]
> self.class.module_eval <<-"end_eval"
> class ::#{class_name} < Base
> [...]
> end
> end_eval
> end
> end
>
> В своей программе я вызываю несколько раз Base.create_object() с
> нужными параметрами и по идее возвращаемое значение должно быть
> новосозданным классом. Или нет?
В данном примере возвращается nil. Это то что возвращает module_eval
>
> Тогда второй вопрос - как мне получить этот новый класс? Типа:
>
> klass = Base.create_object()
> [...]
> obj = klass.new()
Откуда там берется class_name?
В любом случае создается класс с этим именем.
Вот:
class Base
def Base.create_object(name)
self.class.module_eval <<-"end_eval"
class ::#{name} < Base
def qqq
puts "qqq"
end
end
end_eval
end
end
puts Base.create_object("AAA")
AAA.new.qqq
--
Best regards,
Yuri Leikind
"Миротворец - это человек, который кормит крокодила в надежде, что тот сожрет его последним"
Уинстон Черчилль
Подробная информация о списке рассылки Ruby