public Method

Object.extend(...)

obj.extend(module, ...)     obj

Adds to obj the instance methods from each module given as a parameter.

module Mod
  def hello
    "Hello from Mod.\n"
  end
end

class Klass
  def hello
    "Hello from Klass.\n"
  end
end

k = Klass.new
k.hello         #=> "Hello from Klass.\n"
k.extend(Mod)   #=> #<klass:0x401b3bc8>
k.hello         #=> "Hello from Mod.\n"</klass:0x401b3bc8>

Source Code

/*
*  call-seq:
*     obj.extend(module, ...)    => obj
*  
*  Adds to _obj_ the instance methods from each module given as a
*  parameter.
*     
*     module Mod
*       def hello
*         "Hello from Mod.\n"
*       end
*     end
*     
*     class Klass
*       def hello
*         "Hello from Klass.\n"
*       end
*     end
*     
*     k = Klass.new
*     k.hello         #=> "Hello from Klass.\n"
*     k.extend(Mod)   #=> #<Klass:0x401b3bc8>
*     k.hello         #=> "Hello from Mod.\n"
*/

static VALUE
rb_obj_extend(argc, argv, obj)
   int argc;
   VALUE *argv;
   VALUE obj;
{
   int i;

   if (argc == 0) {
       rb_raise(rb_eArgError, "wrong number of arguments (0 for 1)");
   }
   for (i=0; i<argc; i++) Check_Type(argv[i], T_MODULE);
   while (argc--) {
       rb_funcall(argv[argc], rb_intern("extend_object"), 1, obj);
       rb_funcall(argv[argc], rb_intern("extended"), 1, obj);
   }
   return obj;
}
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.