3
Kernel#autoload
和Module#autoload
有什麼區別?什麼是每個使用的上下文?Ruby內核#autoload和Module#自動加載區別
Kernel#autoload
和Module#autoload
有什麼區別?什麼是每個使用的上下文?Ruby內核#autoload和Module#自動加載區別
在標準文檔中可能會看到這些方法的源代碼,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
。