前田です。

In message "[ruby-list:9774] how to make constructor private"
Tomoyuki Kosimizu <greentea / fa2.so-net.or.jp> wrote:

|コンストラクタ(initialize)をprivateにはできないのでしょうか?
|次のようなコードを書いたのですが、効きめがありませんでした。

initializeはコンスタラクタというよりイニシャライザとでも
いうべきものでコンスラクタ(new)の内部で呼ばれます。

|コンストラクタをprivateにしたいのは、インスタンスの生成を
|クラス・メソッドだけに限定したいからです(Singletonで
|しょうか?)。簡単に書くと:

実はnewも普通のクラスメソッドだったりします。

|def Foo
|  def Foo.make_foo
|    Foo.new
|  end
|  
|  def initialize
|    @val = 100
|  end
|  private(:initialize)
|end

# 最初のdefはclassのtypoですよね?

これは

class Foo
  private_class_method :new
  
  def Foo.make_foo
    new
  end
end

とすればよいと思います。
make_fooでnewを呼ぶ時にレシーバを省略するのがミソです。

# あと、蛇足ながらmake_fooというのは冗長な気がします。
# makeでよいのではないでしょうか。

-- 
前田 修吾 <shugo / aianet.ne.jp>