2013-12-16 3 views
1

다른 사람의 모듈이 포함되어있어 여러 파일로 분리되어있는 것 같습니다. 그것은 다음과 같은 :모듈에서 접근하는 데 문제가 있습니까?

alfred.rb :

require 'alfred/ui' 

module Alfred 
    <code> 
end 

알프레드/ui.rb :

module Alfred 
    class Logger 
    def info(msg) 
     logger.info msg 
    end 
    end 
end 

내가 require "alfred"을 가지고 내 코드에서 info 방법에 액세스하려고 해요 상단이 구문을 사용 :

Alfred::Logger.info("my message") 

작동하지 않는 결과는 #<NameError: uninitialized constant Alfred::Logger>입니다.

둘째, 누군가가 설명 할 수 있다면 내가 좋아할 것입니다. 정확히 루비는 이와 같이 여러 파일로 나뉘어져있는 모듈을 "구성"합니다. alfred/ui.rb의 코드가 행의 시작 부분에 alfred.rb 끝 부분에 포함됩니까? 모든 것이 다른 방식으로 결합 되나요? 어쩌면 상관 없지만, 머리 주위를 감싸는 데 도움이 될 것 같습니다.

관심있는 사람을 위해 내가 사용중인 모듈의 전체 코드는 at Github입니다.

내가이 방법으로이 방법을 사용할 수없는 이유와 해결 방법을 설명해 줄 수 있습니까?

+0

Alfred :: Logger : Class'에 대해 'NoMethodError : 정의되지 않은 메소드'info'오류가 발생합니다. 그 전화는 어디에서합니까? –

+0

하지만 guthub repo에서는'Alfred' 모듈 안에'Logger' 클래스의 정의가 없습니다. 'LogUI <:: Logger' 클래스만을 사용합니다. Alfred :: LogUI.info ("my message")' –

+0

재미 있습니다. 클래스를 마지막으로 다운로드 한 이후로 업데이트 된 것 같습니다. 나는 최신 뉴스를 다운로드하고 오늘 밤 집에있을 때 그 사진을 줄 것이다. – ebarrere

답변

0

#info인스턴스 메서드입니다. 즉, Logger 클래스의 인스턴스에만 존재합니다. 코드에서 직접 호출하려면 Alfred::Logger.new.info "some message"으로 전화를 걸 겠지만 약간 이상하게 보입니다. 보통이 유형의 것은 라이브러리에 의해 내부적으로 사용됩니다.

은이 클래스 메서드 같이 정의 되었다면 :

module Alfred 
    class Logger 
    def self.info(msg) 
     logger.info msg 
    end 
    end 
end 

는 당신이 시도하고로 전화를 할 수있을 것입니다.

+0

코드의 경우, 코드 상단에'@my_logger = Alfred :: Logger.new' 같은 것을 시도한 다음, 전체적으로 '@my_logger.info "foo!"를 실행하면됩니다. –

+0

아, 설명해 주셔서 감사합니다. 내 머리 속에서 인스턴스/클래스 메소드가 바뀌 었습니다. 그러나 여전히 제공 한 구문을 사용하여 로거를 인스턴스화 할 수는 없습니다. 전과 같이 '초기화되지 않은 상수 Alfred :: Logger' 오류가 발생합니다. 그것에 대한 아이디어가 있습니까? – ebarrere

관련 문제