0

以下を読んだだけでは、どのようModule#autoladに機能するのか理解できませんでした。Module#autoload?

Module#autoload:そのモジュール (文字列またはシンボル) が mod の名前空間で初めてアクセスされたときに (Kernel::require を使用して) ロードされるファイル名を登録します。

モジュール#autoload? - mod の名前空間に name が autoload として登録されている場合、ロードされるファイル名を返します。c**an は、いくつかの小さなコード例で概念を理解するのに役立ちますか?

4

2 に答える 2

1

例:

$ echo 'class AutoloadDemo; end' > autoload_demo.rb
$ ruby -e "
> p autoload? :AutoloadDemo
> p defined?(AutoloadDemo)
> autoload :AutoloadDemo, './autoload_demo'
> p autoload? :AutoloadDemo
> p defined?(AutoloadDemo)
> p AutoloadDemo
> "
nil
nil
"./autoload_demo"
"constant"
AutoloadDemo

説明:定数 (メソッドautoloadの引数シンボル) の「遅延読み込み」を登録します。autoloadその記号 (例では ) で表されるコスタントAutoloadDemoがスクリプト内で検出されると、Ruby はその定数 ( の 2 番目の引数autoload) に関連付けられたファイルを必要とします。autoload?「この定数はオートローディング用に登録されていますか?」という質問に対する答えにすぎません。


常時登録

Ruby では、定数はプログラムの実行中に同じであるべき値です。大文字で始まる必要があります。

定数登録とは、Ruby インタープリターが を呼び出したときに行うことautoloadです。

OK、次の実行でこの定数に遭遇したときに、定義されていない場合は、NameError を発生させる代わりに、このファイルを必要とし、定数が定義されているかどうかを確認します。もしそうなら、私は実行を続けます。

于 2013-03-12T21:43:10.760 に答える
0

autoload は基本的に、定数が最初に使用されたときに ruby​​ ファイルをロードする方法です。これは、最初に定数を使用することになったときの「遅延読み込み」または「ジャストインタイム読み込み」に役立ちます。詳細については、 http://www.rubyinside.com/ruby-techniques-revealed-autoload-1652.htmlを参照してください。

于 2013-03-12T21:37:23.537 に答える