2012-04-05 1 views
5

클래스 << self를 사용하면 클래스 나 모듈을 언제 사용할 수 있습니까?

class Helper 
    class << self 
    # ... 
    end 
end 

module Helper 
    class << self 
    # ... 
    end 
end 

당신이 다른 이상을 사용하는 것 사이의 사용량에 차이가 있습니까?

+0

그들 중 하나는 다른 문자 하나가 있습니까? :) "차이가 있습니까?"라는 것이 무엇을 의미합니까? 하나는 클래스이고, 하나는 모듈이며, 둘 다 eigenclass에 들어갑니다. – Phrogz

+0

나는 언제 다른 것을 사용할지 묻는다는 것을 의미한다고 생각합니다. 나는 그것을 반영하기 위해 질문을 편집했다. –

답변

4

class<<self은 클래스와 모듈의 유일한 차이점이 있기 때문에 빨간 청어 인 것 같습니다. 아마도 "인스턴스화하지 않으려는 개체를 만들고 싶지만 일부 메서드의 네임 스페이스로만 존재할 수 있습니다. (또한 고유 한 전역, 상태를 가진 단일 개체 일 수도 있습니다)."

이 경우, 둘 다 똑같이 작동합니다.

class Variation < Helper 

대신

module Helper 
    module OwnMethods 
    # Put methods here instead of class << self 
    end 
    extend OwnMethods 
end 

module Variation 
    extend Helper::OwnMethods 
의 : 당신이 파생 상품 (같은 방법을 상속하는 다른 개체)를 만들 수 있다는 기회가 약간 쓰기 쉽습니다으로 다음 클래스를 사용해야가있는 경우

그러나 네임 스페이스의 경우 클래스를 통해 일반적으로 모듈을 사용합니다. 클래스는 인스턴스화가 발생 함을 의미하기 때문입니다.

2

모듈과 클래스의 차이점은 모듈이 아닌 클래스의 인스턴스를 만들 수 있다는 것입니다. Helper (h = Helper.new)의 인스턴스를 생성해야한다면 클래스 여야합니다. 그렇지 않은 경우 모듈을 유지하는 것이 가장 좋습니다. 나머지 코드가 질문과 어떻게 관련이 있는지 잘 모르겠습니다. 모듈 또는 클래스에 클래스 메서드가 있는지 여부는 해당 개체의 인스턴스를 만들어야하는지 여부와 관련이 없습니다.