2012-01-26 5 views
1

저는 Ruby를 처음 접했기 때문에 제가하는 일이 모범 사례인지 확실하지 않습니다. 내가 파일 something.rb에 호출하는 다른 파일 somethingelse.rb이 'REXML/문서'루비 모듈을 올바르게 포함 할 수 없습니다.

module MyModule 
    def import(file) 
     Document.new(File.new(file)) 
    end 
end 

이 필요합니다 지금은 something.rb에 모듈에있는 함수 수입을 정의하는 것을 시도하고있다 내가 다른 파일에서 모듈을 가져올 때 그 가 'something.rb을'

class MyClass 
    include MyModule 
    def initialize(file) 
     @myFile = import(file) 
    end 
end 

문제 필요로 가져올 경우에만 발생 기능을 사용합니다. 같은 파일에서 모듈을 사용하면 모든 것이 예상대로 작동합니다. 오류는 다음과 같습니다.

usr/lib/ruby/1.8/rexml/dtd/elementdecl.rb:8: warning: already initialized constant PATTERN_RE 
XMLTest.rb:9: uninitialized constant MyModule (NameError) 

무엇이 잘못 되었나요?

답변

2

당신은 당신이 당신의 첫 번째 파일에로드하려는 다른 파일이 필요합니다, 루비는 자동으로 당신을 위해 그렇게 할 것입니다. 따라서 모듈이 "something.rb"라는 파일에있는 경우 :

require "something" 

class MyClass 
    include MyModule 
    def initialize(file) 
    @myFile = import(file) 
    end 
end 
+0

우리 rexml didn ' "XMLParser.rb"라고 불렀습니다. "XMLParser.rb"가 필요합니다. 도와 주셔서 감사합니다! =] – dahbearz

0

rexml require를 require_once로 변경해보십시오.

그래서 :

require_once 'rexml/document' 
+0

불행히도 문제가 해결되지 않았습니다. rexml을 somethingelse.rb로 이동하면 오류가 사라지는 것 같습니다. 내 주요 관심사는 MyModule이 정의되지 않은 상수라고 통역사가 생각하는 이유입니다. – dahbearz

+0

오, 나는주의를 충분히 기울이지 않았다. (나는 당신이 '이미 초기화 된 상수'라인에 대해 걱정하고 있고, 그것을 포함하고있는 파일에서 모듈을 필요로하지 않는다고 완전히 놓쳤다 고 생각했다.) –

관련 문제