[Ruby] Q: module_eval
Alexey I. Froloff
raorn на immo.ru
Пн Сен 20 12:25:40 MSD 2004
* Yuri Leikind <y.leikind@> [040920 12:11]:
> > В своей программе я вызываю несколько раз Base.create_object() с
> > нужными параметрами и по идее возвращаемое значение должно быть
> > новосозданным классом. Или нет?
> В данном примере возвращается nil. Это то что возвращает module_eval
У меня тоже. Но судя по документации:
$ ri module_eval
----------------------------------------------------- Module#module_eval
mod.class_eval(string [, filename [, lineno]]) => obj
mod.module_eval {|| block } => obj
------------------------------------------------------------------------
Evaluates the string or block in the context of _mod_. This can be
used to add methods to a class. +module_eval+ returns the result of
evaluating its argument.
Результат eval'а "class Something; end" разве не будет об'ект
класса Class?
> Откуда там берется class_name?
Генерится динамически. У меня создаётся класс на каждый
выртуальный почтовый домен, об'екты этих классов - пользователи в
соответствующем домене.
[...]
def Base.create_object(config={})
# Just upcase the first letter of the new class name
str = config[:class_name]
class_name = str[0].chr.upcase + str[1..-1]
[...]
> В любом случае создается класс с этим именем.
Да, но имён классов в общем виде я не знаю. Пока сделал затычку
в виде
class_name = name[0].chr.upcase + name[1..-1]
dom['user'] = eval "::#{class_name}"
где name - config[:class_name], но вдруг алгоритм генерации имени
класса изменится в следующей версии activeldap?
--
Regards, Sir Raorn.
-------------------
> Мы вообще все время чего-то ждем. К чему бы это :) ?
К дезорганизации.
-- mike in devel-kernel@
----------- следущая часть -----------
Было удалено вложение не в текстовом формате...
Имя : отсутствует
Тип : application/pgp-signature
Размер : 189 байтов
Описание: отсутствует
Url : http://lists.altlinux.ru/pipermail/ruby/attachments/20040920/ebb08608/attachment.bin
Подробная информация о списке рассылки Ruby