インスタンスメソッドは、クラス定義ブロック内で定義されます。クラスメソッドは、クラスのシングルトンクラスのシングルトンメソッドとして定義され、非公式には「メタクラス」または「固有クラス」とも呼ばれます。private
はキーワードではなくメソッドです(Module#private)。
これは、メソッドの呼び出しでself#private
/ A#private
それ以外の切り替えまで、すべての今後のインスタンスメソッドの定義のためのプライベートアクセス「を切り替えます」:
class A
private
def instance_method_1; end
def instance_method_2; end
# .. and so forth
end
前述したように、クラスメソッドは実際にはシングルトンクラスで定義されたシングルトンメソッドです。
def A.class_method; end
または、特別な構文を使用して、Aの匿名のシングルトンクラスの定義本体を開きます。
class << A
def class_method; end
end
- 「プライベートメッセージ」の受信機自己 -内部はclass A
内部クラスオブジェクトA.自己あるclass << A
ブロックが別のオブジェクト、シングルトンクラスです。
次の例は、実際には、2つの異なる受信者またはターゲットを呼び出しに使用して、privateという2つの異なるメソッドを呼び出しています。最初の部分では、プライベートインスタンスメソッド(「クラスA」)を定義し、後者ではプライベートクラスメソッド(実際にはAのシングルトンクラスオブジェクトのシングルトンメソッド)を定義します。
class A
# self is A and private call "A.private()"
private def instance_method; end
class << self
# self is A's singleton class and private call "A.singleton_class.private()"
private def class_method; end
end
end
次に、この例を少し書き直します。
class A
private
def self.class_method; end
end
[Ruby言語デザイナー]が犯した間違いを見ることができますか?Aの今後のすべてのインスタンスメソッドのプライベートアクセスを切り替えますが、別のクラスであるシングルトンクラスでシングルトンメソッドを宣言します。