这个generate_method被定义在模块G当中,它接受一系列参数,来动态创建相关的方法。于是我们就实现了这样的DSL功能:
通过在类C里面声明generate_method :method1, :method2,让类C动态的添加了两个实例方法method1,method2,是不是很有意思?
- module ModuleA
- def self.included(c) #回调接口
- c.extend(ModuleB)
- end
- module ModuleB
- def generate_method(*args)
- args.each do|method_name|
- define_method(method_name){puts method_name}
- end
- end
- end
- end
- class Test
- include ModuleA
- generate_method :method_one , :method_two
- end
- a = Test.new
- a.method_one
- a.method_two