Rubyリファレンス: Home

public (Module)

Edit   History

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

private

public

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

次の例では、privateメソッドを呼び出したあとに定義するメソッドはprivateになります。さらにそのあとでpublicなメソッドを定義するためにpublicメソッドを呼び出しています。

class Book
  attr_accessor :title
  def initialize(title)
    @title = check_title(title)
  end
  
  private  # これ以降はprivate
  def check_title(title)
    title = title.to_s
    raise "too long!" if title.size > 100
    title
  end
  
  public   # これ以降はpublic
  def to_s
    @title
  end
end
 
book = Book.new("Programming Ruby")
puts book.to_s
Programming Ruby
public(name, ...)

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

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

class Parent
  private
  def some_method
    "private in Parent"
  end
end
 
class Child < Parent
  public :some_method
end
 
child = Child.new
puts child.some_method
private in Parent
#<NoMethodError: private method `some_method' called for #<Parent:0x349120>>

関連項目