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 #=> エラー

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください