3
Kernel#autoload
とModule#autoload
の違いは何ですか?それぞれが使用されているコンテキストは何ですか?Ruby Kernel#autoloadとModule#autoloadの違い
Kernel#autoload
とModule#autoload
の違いは何ですか?それぞれが使用されているコンテキストは何ですか?Ruby Kernel#autoloadとModule#autoloadの違い
Kernel#autoload
は、受信者をそのクラスにキャストした後にModule#autoload
を呼び出します。
1は、最も一般的なアプローチを使用し、クラスレベルにautoload
呼び出す:
class C
autoload(:M, 'm')
end
Module#autoload
はClass < Module
ために呼び出されます。受信機はこの場合すでにClass
'のインスタンスであるため、明示的にキャストする必要はありません。
一方、一つのメソッド本体内autoload
を呼び出す必要があります後者の場合
class C
def c
autoload(:M, 'm')
end
end
受信機がインスタンスであり、それはModule
子孫でない限り、Kernel#autoload
がこれと呼ばれ、このインスタンスのクラスを取得し、その呼び出しをModule#autoload
に渡します。