2013-07-22 3 views
1
아래

는 그것은 예를 방법 대신 더 클래스 방법처럼,왜 alias_method가 인스턴스 메소드입니까?

class A 
def say 
    puts 'say'  
end 

alias_method :talk, :say 
end 

alias_method이 모듈 클래스에 정의 된 개인 예를 방법이지만 위의 코드에서, alias_method의 일반적인 사용입니다 왜 위의 코드가 작동합니까?

+0

두 달 동안 stackoverflow를 사용하고 3 가지 질문을하고 답변을 수락하지 않았습니다. 지금까지 해답이 없다면 만족 스럽지만 답이 맞으면 받아들이십시오. – sawa

답변

0

정확히 알 수 있듯이 A의 클래스 메소드이며 동시에 Class 클래스가 서브 클래스 인 Module 클래스의 인스턴스 메소드입니다. 클래스 메소드는 인스턴스 메소드에만 배타적이지 않습니다. 모든 클래스 메소드는 싱글 톤 클래스의 메소드가 아니면 Class 클래스의 인스턴스 메소드입니다.

위의 예에서, alias_methodModule 클래스에 정의됩니다. 따라서 AModule의 인스턴스이고 alias_method에 대한 메서드 호출의 수신자 일 수 있습니다. 그러나이 방법은 비공개이므로 수신자는 암시해야합니다.

+0

Ruby에서 모든 클래스는 Class 클래스의 인스턴스입니다. 예제에서 클래스 A는 Class의 인스턴스이고 Module은 Class의 기본 클래스이므로 A가 Module의 인스턴스입니다. 그렇다면 Module의 private 인스턴스 메소드가 A.의 클래스 메소드가되는 이유를 이해할 수 있습니다. Object가 Module의 기본 클래스이므로 모든 Object의 인스턴스 메소드가 클래스의 클래스 메소드가됩니다. A, 맞지? – buaaji

+0

정확히 그 경우입니다. – sawa

관련 문제