Rubyリファレンス: Home
Login
You can't edit this entry.
Title: Path:
Format: WikiText WikiText Help
Body: {{crumb_method|Module}} pre(format). <var>mod</var>.<nowiki>private_class_method</nowiki>(<var>name</var>, ...) desc. `*<nowiki>private_class_method</nowiki>*`メソッドは、クラスやモジュールのクラスメソッドを`private`なメソッドに変えます。引数にはメソッド名をシンボルか文字列で指定します。ここで言う「クラスメソッド」とは、クラスやモジュールの特異メソッドか、`Module`クラスや`Class`クラスのインスタンスメソッドです。 引数のメソッド名は複数指定できます。定義されていないメソッド名を指定すると例外`NameError`が発生します。戻り値はレシーバ(クラスやモジュール)自身です。 ``private_class_method``メソッドがよく使われるのは、`[[new (Class)|]]`の呼び出しを禁止して、インスタンス作成用のメソッドを別に用意するクラスを作る場合です。 bc(sample). class Book private_class_method :new def self.create new end end begin p Book.create p Book.new rescue p $! end bc(result). #<Book:0x3874350> #<NoMethodError: private method `new' called for Book:Class> クラスメソッドが`private`になるのは、「``private_class_method``を呼び出したクラスにおいて」です。親クラスのメソッドをサブクラスで`private`にした場合は、サブクラスでは`private`になり、親クラスでは`public`のままです。 bc(sample). class Klass1 def self.message() "hello" end end class Klass2 < Klass1 private_class_method :message end begin p Klass1.message p Klass2.message rescue p $! end bc(result). "hello" #<NoMethodError: private method `message' called for Klass2:Class> == 関連項目 == * `[[public_class_method (Module)|]]` : クラスメソッドを`public`にする。 * `[[private (Module)|]]` : メソッドを`private`にする。
Sponsored by Oiax Inc. / Powered by Ruby on Rails and AmiWiki