public Method

Object.method(p1)

obj.method(sym)     method

Looks up the named method as a receiver in obj, returning a Method object (or raising NameError). The Method object acts as a closure in obj’s object instance, so instance variables and the value of self remain available.

class Demo
  def initialize(n)
    @iv = n
  end
  def hello()
    "Hello, @iv = #{@iv}"
  end
end

k = Demo.new(99)
m = k.method(:hello)
m.call   #=> "Hello, @iv = 99"

l = Demo.new('Fred')
m = l.method("hello")
m.call   #=> "Hello, @iv = Fred"

Source Code

/*
*  call-seq:
*     obj.method(sym)    => method
*  
*  Looks up the named method as a receiver in <i>obj</i>, returning a
*  <code>Method</code> object (or raising <code>NameError</code>). The
*  <code>Method</code> object acts as a closure in <i>obj</i>'s object
*  instance, so instance variables and the value of <code>self</code>
*  remain available.
*     
*     class Demo
*       def initialize(n)
*         @iv = n
*       end
*       def hello()
*         "Hello, @iv = #{@iv}"
*       end
*     end
*     
*     k = Demo.new(99)
*     m = k.method(:hello)
*     m.call   #=> "Hello, @iv = 99"
*     
*     l = Demo.new('Fred')
*     m = l.method("hello")
*     m.call   #=> "Hello, @iv = Fred"
*/

static VALUE
rb_obj_method(obj, vid)
   VALUE obj;
   VALUE vid;
{
   return mnew(CLASS_OF(obj), obj, rb_to_id(vid), rb_cMethod);
}
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.