2009-05-11 13 views
3

私のRubyプログラムでは、ライブラリを遅延ロードしようとしています(奇妙なことにcrack)。`autoload`はエラーを発生させますが、` require`は(ruby)を返しません。

私はこれを行う場合は、次の

require 'rubygems' 
require 'crack' 

すべてが正常に動作しています。しかし、私がこれを試してみると:LoadErrorが発生しています:

require 'rubygems' 
autoload :Crack, 'crack' 

そのようなファイルをロードする - 亀裂

このエラーはなぜ発生していますか?それは '亀裂'(と私の他のユーザがインストールした宝石)が私の$ LOAD_PATHにないからですか?

編集:

さらに、autoloadは標準ライブラリでは動作しない:

autoload :Yaml, 'yaml' 

は正常に動作し、エラーを発生させません。

答えて

5

次の操作を行うことによって、あなたの$ LOAD_PATHに「亀裂」宝石を追加する必要があります。

gem 'crack' 

RubyGemsのカーネル#が前に宝石を「活性化」しようとする方法で必要と置き換えるので、これは必要です必要な場合はそれを必要としますが、Kernel#load - とautoload callsはバックエンドで同じように動作しません。

+0

優秀! Kernel#requireも説明してくれてありがとう! 'require 'rubygems''の前後に配置する必要がありますか、それとも重要ですか? –

+0

後: "gem"メソッドがrubygemsによってKernelに追加されるため、rubygemsが必要になるまで利用可能になりません。 –

関連する問題