autoload(const_name, feature) -> nil
[permalink][rdoc][edit]-
定数 const_name を最初に参照した時に feature を Kernel.#require するように設定します。
const_name が autoload 設定されていて、まだ定義されてない(ロードされていない)ときは、 autoload する対象を置き換えます。 const_name が(autoloadではなく)既に定義されているときは何もしません。
- [PARAM] const_name:
- String または Symbol で指定します。なお、const_name には、"::" 演算子を含めることはできません。つまり、self の直下に定義された定数しか指定できません。
- [PARAM] feature:
- Kernel.#require と同様な方法で autoload する対象を指定する。
# ------- /tmp/foo.rb --------- class Foo class Bar end end # ----- end of /tmp/foo.rb ---- class Foo autoload :Bar, '/tmp/foo' end p Foo::Bar #=> Foo::Bar
以下のようにモジュールを明示的にレシーバとして呼び出すこともできます。
# ------- /tmp/foo.rb --------- class Foo class Bar end end # ----- end of /tmp/foo.rb ---- class Foo end Foo.autoload :Bar, '/tmp/foo' p Foo::Bar #=> Foo::Bar
以下のように、autoload したライブラリがネストした定数を定義しない場合、NameError が発生します。
# ------- /tmp/bar.rb --------- class Bar end # ----- end of /tmp/bar.rb ---- class Foo autoload :Bar, '/tmp/bar.rb' end p Foo::Bar #=> -:4:in `<main>': uninitialized constant Foo::Bar (NameError)
[SEE_ALSO] Kernel.#autoload