[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