2011-10-03 11 views
6

어떻게 작동하나요? 다음을 실행하면 "hi from class"이 두 번 인쇄됩니다. 이것이 루비 안에서 어떻게되어 이런 일이 일어나게할까요? 나는 사실 나는 당신이 알고 있습니다 여부를 알 수없는 클래스클래스 클래스 - 인스턴스 대 클래스 메서드

class Class 
    def foo 
    puts "hi from class" 
    end 
end 

Class.foo 
x = Class.new 
x.foo 

답변

9

의 인스턴스 방법을 아니지만, 당신이 class Class ... end을 수행 할 때, 당신은 새로운 클래스가 Class 이름 생성하지 않는, 당신이 ' 기존 클래스를 다시 엽니 다 Class.

Class은 모든 클래스가 인스턴스가되는 클래스이므로 Class은 그 자체의 인스턴스입니다. 이 때문에 다른 모든 클래스에서와 마찬가지로 Class의 인스턴스 메서드를 Class에 직접 호출 할 수 있습니다.

+0

그래서 (클래스 클래스의 본문에서) def self.foo; "자기를 ** 자기에게서"; end;'... 이제'Class.foo' 문은'hi from self'를 출력합니까? – slindsey3000

+0

@ slindsey3000 :'Class'에 인스턴스 메소드와 클래스 메소드를 정의하면'Class.foo'는 클래스 메소드를 호출하고'AnyOtherClass.foo'는 인스턴스 메소드를 호출합니다. 그래서 당신의 예제에서'Class.foo'는'hi from ** self **'를 출력 할 것입니다. 'String.foo'는'hi from class'를 출력합니다. – sepp2k

관련 문제