クラスのコンストラクタを複数持つには、not possibleだと読んでいます。私は静的メソッドでpublicコンストラクタを置き換えるについて考えているプライベートなものとは別のパブリックコンストラクタを持っている
class C
def initialize x
initialize x,0
end
# Some methods using the private constructor…
def foo
# …
bar = C.new 3,4
# …
end
private
def initialize x,y
@x = x
@y = y
end
end
、それはC
を拡張する他のクラスを防止するであろう:だから次のコードは動作しません。
class C
def initialize x
post_init x,0
end
# Some methods using the private constructor…
def foo
# …
bar = C.new baz
bar.post_init 3,4
# …
end
private
def post_init x,y
@x = x
@y = y
end
end
をしかし、ここで、post_initは良いことではありませんこれは、2回呼び出されます:私はまた、民間のポスト初期化メソッドを作ることについて考えてきました。
パブリックコンストラクタを提供する方法はありますか?プライベートで新しいインスタンスを作成する方法はありますか?そうでない場合は、何か類似のことをする最良の方法は何ですか?
することができます私は本当に理解していませんなぜあなたはそれをしたいのでしょうか?あなたが思いついたのはあなたの目的に合っているようですが、あなたのコードの 'post_init'をクラスメソッドとしていますが、インスタンスメソッドから呼び出しています。 –
私はクラスメソッドについて間違いを犯しました。インスタンスメソッドでなければなりません。結果的に投稿を更新しました。 – Codoscope
「@ y」を直接変更することを考えましたか?それはより一般的でストレートなアプローチのように見える –