public Method

Module.instance_method(p1)

mod.instance_method(symbol)    unbound_method

Returns an UnboundMethod representing the given instance method in mod.

class Interpreter
  def do_a() print "there, "; end
  def do_d() print "Hello ";  end
  def do_e() print "!\n";     end
  def do_v() print "Dave";    end
  Dispatcher = {
   ?a => instance_method(:do_a),
   ?d => instance_method(:do_d),
   ?e => instance_method(:do_e),
   ?v => instance_method(:do_v)
  }
  def interpret(string)
    string.each_byte {|b| Dispatcher[b].bind(self).call }
  end
end

interpreter = Interpreter.new
interpreter.interpret('dave')

produces:

Hello there, Dave!

Source Code

/*
*  call-seq:
*     mod.instance_method(symbol)   => unbound_method
*  
*  Returns an +UnboundMethod+ representing the given
*  instance method in _mod_.
*     
*     class Interpreter
*       def do_a() print "there, "; end
*       def do_d() print "Hello ";  end
*       def do_e() print "!\n";     end
*       def do_v() print "Dave";    end
*       Dispatcher = {
*        ?a => instance_method(:do_a),
*        ?d => instance_method(:do_d),
*        ?e => instance_method(:do_e),
*        ?v => instance_method(:do_v)
*       }
*       def interpret(string)
*         string.each_byte {|b| Dispatcher[b].bind(self).call }
*       end
*     end
*     
*     
*     interpreter = Interpreter.new
*     interpreter.interpret('dave')
*     
*  <em>produces:</em>
*     
*     Hello there, Dave!
*/

static VALUE
rb_mod_method(mod, vid)
   VALUE mod;
   VALUE vid;
{
   return mnew(mod, Qundef, rb_to_id(vid), rb_cUnboundMethod);
}
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.