인스턴스 메소드는 클래스 정의 블록 내에 정의됩니다. 클래스 메소드는 클래스의 싱글 톤 클래스에서 "메타 클래스"또는 "고유 클래스"라고도하는 싱글 톤 메소드로 정의됩니다. 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
"메시지 개인" -self -inside 의 수신자는 class A
클래스 오브젝트 A입니다. class << A
블록 안의 self 는 또 다른 오브젝트 인 singleton 클래스입니다.
다음 예제는 실제로 호출에 대해 두 개의 다른 수신자 또는 대상을 사용하여 private 이라는 두 개의 다른 메소드를 호출하는 것입니다. 첫 번째 부분에서는 프라이빗 인스턴스 메소드 ( "클래스 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
[루비 언어 디자이너]가 저지른 실수를 볼 수 있습니까? 다가오는 A의 모든 인스턴스 메소드에 대한 개인 액세스를 토글하지만 다른 클래스 인 싱글 톤 클래스에서 싱글 톤 메소드를 계속 선언하십시오.