Method: Module#class_eval

Defined in:
vm_eval.c

#class_eval(string[, filename [, lineno]]) ⇒ Object #class_eval {|mod| ... } ⇒ Object #module_eval(string[, filename [, lineno]]) ⇒ Object #module_eval {|mod| ... } ⇒ Object

Evaluates the string or block in the context of mod, except that when a block is given, constant/class variable lookup is not affected. 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

Overloads:

  • #class_eval(string[, filename [, lineno]]) ⇒ Object

    Returns:

  • #class_eval {|mod| ... } ⇒ Object

    Yields:

    • (mod)

    Returns:

  • #module_eval(string[, filename [, lineno]]) ⇒ Object

    Returns:

  • #module_eval {|mod| ... } ⇒ Object

    Yields:

    • (mod)

    Returns:



2360
2361
2362
2363
2364
# File 'vm_eval.c', line 2360

static VALUE
rb_mod_module_eval_internal(int argc, const VALUE *argv, VALUE mod)
{
    return specific_eval(argc, argv, mod, FALSE, RB_PASS_CALLED_KEYWORDS);
}