为了实现类似 DSL 的属性分配,使用了双用途访问器。但是,我正在寻找一种方法来重构明显的代码重复。
class Layer
def size(size=nil)
return @size unless size
@size = size
end
def type(type=nil)
return @type unless type
@type = type
end
def color(color=nil)
return @color unless color
@color = color
end
end
我正在考虑通过与其他方法一起使用来在类方法中定义这些方法define_method
来获取/设置实例变量。但是,难题是如何从类方法访问实例?
def self.createAttrMethods
[:size,:type,:color].each do |attr|
define_method(attr) do |arg=nil|
#either use instance.send() or
#instance_variable_get/set
#But those method are instance method !!
end
end
end