2016-07-10 60 views

回答

4

在標準文檔中可能會看到這些方法的源代碼,Kernel#autoload在將接收器轉換爲類之後調用Module#autoload

當人們使用最常用的方法,並在類級別調用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

相關問題