[Ruby] Q: module_eval

Тим Алексеевский realtim на mail.ru
Пн Сен 20 12:36:33 MSD 2004


Alexey I. Froloff (Сен 20, 12:25):
> * 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?
  Вроде нет:
     [tim на 12:32:01:~]$ irb
     irb(main):001:0> a=class A; end
     => nil
     irb(main):002:0> a
     => nil
     irb(main):003:0> 
  Может:   
     irb(main):004:0> a=eval("class A; end; A")
     => A
     irb(main):005:0> a
     => A
     irb(main):006:0> 

Тим


Подробная информация о списке рассылки Ruby