前田です。

In message "[ruby-list:7020] Re: lib/date.rb"
Tadayoshi Funaba <tadf / kt.rim.or.jp> wrote:

|>クラスメソッドは隠せませんからメソッドにしてprivate宣言する
|>のが正しいでしょうか?
|
|クラスメソッドの下請をどう考えればいいかということなんですけれど。
|# ruby ではそういったことはあまり気にしないのが正解?

クラスメソッド(クラスの特異メソッド)の下請けだけならクラスメソッド
をprivateにすればよいです。
# まつもとさんがクラスメソッドは隠せない、と書いたのは、クラス
# メソッドをprivateにすると、インスタンスメソッドから呼べない
# という意味だと思います。

具体的には

class Foo
  def Foo.bar; ... end
  private_class_method :bar
  ...
end

あるいは、

class << Foo
  def bar; ... end
  private :bar
  ...
end

とします。

クラスメソッドとインスタンスメソッドの両方で使う場合は、

class Foo
  def bar; ... end
  module_function :bar
  private_class_method :bar
  ...
end

とするのがよいかもしれません。

これが気持ち悪ければ、

class Module
  def private_function(*methods)
    module_function(*methods)
    private_class_method(*methods)
  end
end

としておけば、

  private_function :bar

ですみますね。

-- 
前田 修吾