2011-02-17 75 views

回答

0

通過重新定義Object#const_missing方法,可以模仿PHP __autoload()行爲(如定義類名到文件名算法並需要它),該方法在未找到常量(如類名)時調用。

Here there's an example.

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時主要使用這種方法。

+0

感謝您的信息(UPDATE我已經更新上面的鏈接)。使用spl_autoload_register,如果使用未定義的類,我可以註冊my_custom_class_loader函數來觸發。在這個函數中,我可以使用自定義邏輯(如特定的命名約定)來加載所需的類文件。這是可能的紅寶石? – 2011-02-25 03:08:07