public Method

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. The optional filename and lineno parameters set the text for error messages.

class Thing
end
a = %q{def hello() "Hello there!" end}
Thing.module_eval(a)
puts Thing.new.hello()
Thing.module_eval("invalid code", "dummy", 123)

produces:

Hello there!
dummy:123:in `module_eval': undefined local variable
    or method `code' for Thing:Class

Source Code

/*
*  call-seq:
*     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. <code>module_eval</code> returns
*  the result of evaluating its argument. The optional _filename_
*  and _lineno_ parameters set the text for error messages.
*     
*     class Thing
*     end
*     a = %q{def hello() "Hello there!" end}
*     Thing.module_eval(a)
*     puts Thing.new.hello()
*     Thing.module_eval("invalid code", "dummy", 123)
*     
*  <em>produces:</em>
*     
*     Hello there!
*     dummy:123:in `module_eval': undefined local variable
*         or method `code' for Thing:Class
*/

VALUE
rb_mod_module_eval(argc, argv, mod)
   int argc;
   VALUE *argv;
   VALUE mod;
{
   return specific_eval(argc, argv, mod, mod);
}
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.