诗歌rails之 method_missing

当ruby试着去调用一个不存在的方法时( 或者,一个对象发送了一个不能被处理的消息 ),就可能会引起错误并造成程序的终止。你可能更喜欢你编写的程序能够从这样的错误中恢复过来。可以使用method_missing方法,该方法接受一 个方法名,如果该方法不存在,method_missing方法就会被调用:
Ruby代码
  1. def method_missing( methodname )  
  2.    puts( "#{methodname} does not exist" )  
  3. end  
  4.   
  5. xxx #=>xxx does not exist  
method_missing也可以处理还有参数的根本就不存在的方法:
Ruby代码
  1. def method_missing( methodname, *args )   
  2.       puts( "Class #{self.class} does not understand:   
  3.                             #{methodname}( #{args.inspect} )" )   
  4. end   
method_missing方法甚至可以动态地创建没有定义的方法:
Ruby代码
  1. def method_missing( methodname, *args )   
  2.        self.class.send( :define_method, methodname,    
  3.                   lambda{ |*args| puts( args.inspect) } )   
  4. end   
posted @ 2009-07-14 17:23  麦飞  阅读(356)  评论(0编辑  收藏  举报