2012-01-26 14 views
1

私はRubyを少し新しくしているので、私がやっていることがベストプラクティスであるかどうかは分かりません。 私は、ファイルsomething.rbに呼び出し、別のファイルsomethingelse.rbを持っている「REXML /ドキュメント」Rubyモジュールを正しく含むことはできません

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

あなたはあなたの最初のファイルをロードしようとしている他のファイルを必要とする必要があり、Rubyは自動的にあなたのためにそれを行うことはありません。モジュールが "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

ああ、私は十分注意を払っていませんでした:(私はあなたが '既に初期化された定数'行を心配していて、それを含むファイルでモジュールを必要としなかったことを完全に忘れていたと思っています –

関連する問題