Rubyリファレンス: Home

private (Module)

Edit   History

標準クラス・モジュール > Module > private

private

private

クラス定義やモジュール定義の中でprivateメソッドを呼び出すと、それ以降に定義されるインスタンスメソッドはprivateなメソッドになります。戻り値はクラスやモジュール自身です。

次の例では、check_titleメソッドをprivateにしています。check_titleメソッドをレシーバ付きで呼び出そうとすると例外NoMethodErrorが発生します。

class Book
  attr_accessor :title
  def initialize(title)
    @title = check_title(title)
  end
  
  private
  def check_title(title)
    title = title.to_s
    raise "too long!" if title.size > 100
    title
  end
end
 
book = Book.new("Programming Ruby")
book.check_title rescue p $!
#<NoMethodError: private method `check_title' called for #<Book:0x3874c80 @title
="Programming Ruby">>
private(name, ...)

privateメソッドにシンボルか文字列で引数を渡すと、その名前を持つメソッドだけをprivateメソッドにします(メソッド名は複数指定できます)。

次の例では、親クラスParentsome_methodメソッドを、サブクラスChildprivateにしています。親クラスではsome_methodメソッドの可視性はpublicのままです。

class Parent
  def some_method
    "public in Parent"
  end
end
 
class Child < Parent
  private :some_method
end
 
puts Parent.new.some_method
puts Child.new.some_method rescue p $!
public in Parent
#<NoMethodError: private method `some_method' called for #<Child:0x319500>>

関連項目