私のクラスメソッド "コンストラクタ"で新しいインスタンスを作成したいので、new
メソッドがプライベートになっているクラスがあります。しかし、私は今また新しいインスタンスを作成するいくつかのインスタンスメソッドを持つ必要があります。Class.newがプライベートである場合のインスタンスメソッドの新しいインスタンス
たとえば、次のスニペットを見てください。
Class Foo
class << self
#a "constructor" method
def from_x arg
stuff_from_arg = arg.something #something meaningful from arg
new(stuff_from_arg)
end
end
def initialize stuff
@stuff = stuff
end
private_class_method :new #forces use of Foo.from_x
def method_a
other_stuff = "blah"
#These do not work
return new(blah) #nope, instance cannot see class method
return self.class.new(blah) #nope, new is private_class_method
return Foo.new(blah) #same as previous line
return initialize(blah) #See *, but still doesn't work as expected
end
end
私は何を考え始めていますが、私は新しいを作成するために、別のクラスのコンストラクタメソッドを作成する必要があり、このような方法でこのクラスを設計しているかもしれないということです。私は悩みを抱えているところそれはmethod_a
でありますFoo
は、次のように:
#in addition to previous code
Class Foo
class << self
def just_like_new stuff
new(stuff)
end
end
end
これは非常に右または非常にDRYに感じることはありませんが、おそらくこれは私が自分のために作ったベッドです。何か私にできることはありますか?
*この行は少し驚いています。それはblah
を返します。クラス定義の外には、initialize
もあり、それは0引数をとり、nil
を返す誰もがここで起こっていることを知っていますか?