0

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 
4

1 に答える 1