rails动态定义实例方法和类方法

来源:互联网 发布:淘宝王子团队怎么联系 编辑:程序博客网 时间:2024/05/21 19:40

在写代码的时候经常会出现一些这样的情况:

obj.method(type,arg1,arg2..argn)

为了更好理解,我们也经常写成这个样子:

obj.method_type1(arg1,arg2..argn)obj.method_type2(arg1,arg2..argn)obj.method_typen(arg1,arg2..argn)

在ruby元变成中介绍过很多关于精简这些代码的方法,其中有一个define_method,我觉得是解决这种问题不错的方案,方法如下:

[type1,type2....typen].each do |type|  define_method "method_#{type}".to_sym do |arg1,arg2...argn|    obj.method(type,type1,type2...typen)  endend

那么如果需要优化的是类方法呢?比如:

method(type,arg1,arg2..argn)

这种其实原理也一样,主要是需要铭记一点,就是在ruby中,一切皆对象,当前的类本身也是一个对象。那么上面的其实可以这样写:

(class << self; self; end).instance_eval do  [type1,type2....typen].each do |type|    define_method "method_#{type}".to_sym do |arg1,arg2...argn|      method(type,type1,type2...typen)    end   endend
0 0