« ブログの目次を更新 | メイン | REXML::Element.writeの代わりにREXML::Formattersを使う »

Rubyのクラスメソッドをprivateにする方法

次のソースコードでは、Foo#foo()はprivateなクラスメソッドにはなりません。

class Foo
  private
  def self.foo
    return 'foo'
  end
end

Foo.foo #=> 'foo'

そこで、Rubyでクラスメソッドをprivateにする方法です。

1.private_class_methodを使う方法

private_class_methodはその名の通り、指定したメソッドをprivateなクラスメソッドにします。

class Foo
  def self.foo
    return 'foo'
  end
  def self.bar
    return 'bar'
  end
  private_class_method :foo
end

Foo.bar #=> 'bar'
Foo.foo #=> エラー

2.特異クラスでprivateを使う方法

複数のクラスメソッドをまとめて登録するときは、特異クラスで登録することが多いと思います。

特異クラスでprivateを使うと、privateなクラスメソッドになります。

class Foo
  class << self
    def bar
      return 'bar'
    end

    private
    def foo
      return 'foo'
    end
  end
end

Foo.bar #=> 'bar'
Foo.foo #=> エラー

トラックバック

このエントリーのトラックバックURL:
http://www.gesource.jp/mt/mt-tb.cgi/791

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年08月18日 21:32に投稿されたエントリーのページです。

ひとつ前の投稿は「ブログの目次を更新」です。

次の投稿は「REXML::Element.writeの代わりにREXML::Formattersを使う」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35