instance method Module#autoload

autoload(const_name, feature) -> nil[permalink][rdoc][edit]

定数 const_name を最初に参照した時に feature を Kernel.#require するように設定します。

[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