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