在写代码的时候经常会出现一些这样的情况:
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)
end
end
那么如果需要优化的是类方法呢?比如:
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
end
end