2016-07-10 4 views

答えて

4

Kernel#autoloadは、受信者をそのクラスにキャストした後にModule#autoloadを呼び出します。

1は、最も一般的なアプローチを使用し、クラスレベルにautoload呼び出す:

class C 
    autoload(:M, 'm') 
end 

Module#autoloadClass < Moduleために呼び出されます。受信機はこの場合すでにClass 'のインスタンスであるため、明示的にキャストする必要はありません。

一方、一つのメソッド本体内autoloadを呼び出す必要があります後者の場合

class C 
    def c 
    autoload(:M, 'm') 
    end 
end 

受信機がインスタンスであり、それはModule子孫でない限り、Kernel#autoloadがこれと呼ばれ、このインスタンスのクラスを取得し、その呼び出しをModule#autoloadに渡します。

関連する問題