Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Moduleクラス > autoload
autoload(const_name, feature) -> nil
[permalink][rdoc]定数 const_name を最初に参照した時に feature を Kernel.#require するように設定します。
const_name が autoload 設定されていて、まだ定義されてない(ロードされていない)ときは、 autoload する対象を置き換えます。 const_name が(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 したライブラリがネストした定数を定義しない場合、一見、正常に動作しているように見えるので注意が必要です(警告メッセージが出ています)。
# ------- /tmp/bar.rb ---------
class Bar
end
# ----- end of /tmp/bar.rb ----
class Foo
autoload :Bar, '/tmp/bar.rb'
end
p Foo::Bar
p Foo.autoload?(:Bar)
#=> -:4: warning: toplevel constant Bar referenced by Foo::Bar
# Bar
# nil
これは以下のようにネストせずに定義したのと同じことです。
class Foo
end
class Bar
end
p Foo::Bar
#=> -:5: warning: toplevel constant Bar referenced by Foo::Bar
# Bar
[SEE_ALSO] Kernel.#autoload