3

私の Ruby プログラムでは、ライブラリを遅延ロードしようとしています (好奇心旺盛な人向けのクラック)。

私がこれを行う場合:

require 'rubygems'
require 'crack'

すべてが正常に機能しています。ただし、これを試すと:

require 'rubygems'
autoload :Crack, 'crack'

LoadError が発生します。(読み込むファイルがありません -- クラック)

このエラーが発生するのはなぜですか? 「クラック」(したがって、他のユーザーがインストールした宝石) が $LOAD_PATH にないためですか?

編集:

さらに、autoload標準ライブラリで動作します:

autoload :Yaml, 'yaml'

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

4

1 に答える 1

5

次のようにして、'crack' gem を $LOAD_PATH に追加する必要があります。

gem 'crack'

これが必要になるのは、RubyGems が Kernel#require を、必要に応じて必要に応じてそれを要求する前に gem を「アクティブ化」しようとするメソッドに置き換えますが、Kernel#load と autoload 呼び出しがバックエンドでロードする場合は同じことを行わないためです。

于 2009-05-11T20:04:47.327 に答える