From: shugo@... (MAEDA Shugo) Date: 1998-09-30T00:53:09+09:00 Subject: [ruby-list:9776] Re: how to make constructor private 前田です。 In message "[ruby-list:9774] how to make constructor private" Tomoyuki Kosimizu 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でよいのではないでしょうか。 -- 前田 修吾