在PHP中,我使用了spl_autoload_register函數。它允許您在引用時按需加載課程。有沒有辦法在Ruby中完成同樣的事情?是否有一個等價於PHP spl_autload_register的ruby?
1
A
回答
0
通過重新定義Object#const_missing
方法,可以模仿PHP __autoload()
行爲(如定義類名到文件名算法並需要它),該方法在未找到常量(如類名)時調用。
:
2
Ruby有兩種自動加載機制:顯式和隱式。
第一種是基於autoload
的方法。你可以找到詳細的描述here。
autoload :Command, 'thin/command'
autoload :Connection, 'thin/connection'
autoload :Daemonizable, 'thin/daemonizing
第二個是基於文件名。假設路徑/path/to/folder
位於您的$LOAD_PATH
中,那麼Ruby將嘗試加載匹配所需類名稱的文件,並將其與下劃線匹配。
例如,當您第一次使用DefaultLogger
類,紅寶石將嘗試找到,如果
/path/to/folder/default_logger.rb
存在,並且定義了郵政。如果是這樣,文件將與類定義一起被加載。創建Gems時主要使用這種方法。
感謝您的信息(UPDATE我已經更新上面的鏈接)。使用spl_autoload_register,如果使用未定義的類,我可以註冊my_custom_class_loader函數來觸發。在這個函數中,我可以使用自定義邏輯(如特定的命名約定)來加載所需的類文件。這是可能的紅寶石? – 2011-02-25 03:08:07