Ruby的method_missing可以定义client调用不存在的方法时的行为

来源:互联网 发布:淘宝怎样提高排名 编辑:程序博客网 时间:2024/05/01 11:02
class X    def method_missing( methodname, *args )        puts( "Class #{self.class} does not understand: #{methodname}( #{args.inspect} )" )    end endclass Y < X     def aaa        puts( "aaa method" )    end    remove_method( :aaa )endclass Z < Y    def method_missing( methodname, *args )        super        puts( "Now creating method #{methodname}( )" )        self.class.send( :define_method, methodname, lambda{ |*args| puts( args.inspect) } )    end endob = X.newob.aaa( 1,2,3 )ob2 = Y.newob2.ccc( "hello world" )ob3 = Z.newob3.ddd( 1,2,3)ob3.ddd( 4,5,6 )=beginoutput:Class X does not understand: aaa( [1, 2, 3] )Class Y does not understand: ccc( ["hello world"] )Class Z does not understand: ddd( [1, 2, 3] )Now creating method ddd( )[4, 5, 6]=end
0 0