在
unknown
過程中一項非常有用的功能就是自動載入,自動載入功能允許你編寫一組
tcl過程放到乙個指令碼檔案中,然後把該檔案放到庫目錄之下,當程式呼叫這些過程的時候,第一次呼叫時由於命令還不存在就會進入
unknown
命令,而
unknown
則會找到在哪個庫檔案中包含了這個過程的定義,接著會載入它,再去重新執行命令,而到下次使用剛才呼叫過的命令的時候,由於它已經存在了,從而會正常的執行命令,自動載入機制也就不會被再次啟動。
自動載入提供了兩個好處,首先,你可以把有用的過程建立為過程庫,而你無需精確知道過程的定義到底在哪個原始檔中,自動載入機制會自動替你尋找,第二個好處在於自動載入是非常有效率的,如果沒有自動載入機制你將不得不在
tcl應用的開頭使用
source
命令來載入所有可能用到的庫檔案,而應用自動載入機制,應用啟動時無需載入任何庫檔案,而且有些用不到的庫檔案永遠都不會被載入,既縮短了啟動時間又節省了記憶體。
使用自動載入只需簡單的按下面三步來做:
第一,在乙個目錄下建立一組指令碼檔案作為庫,一般這些檔案都以
".tcl"
結尾。每個檔案可以包含任意數量的過程定義。建議儘量減少各指令碼檔案之間的關聯,讓相互關聯的過程位於同乙個檔案中。為了能夠讓自動載入功能正確執行,
proc
命令定義一定要頂到最左邊,並且與函式名用空格分開,過程名保持與
proc
在同一行上。
第二步,為自動載入建立索引。啟動
tcl應用比如
tclsh
,呼叫命令
auto_mkindexdir
pattern ,
第乙個引數是目錄名,第二個引數是乙個模式。
auto_mkindex
在目錄dir
中掃瞄檔名和模式
pattern
匹配的檔案,並建立索引以指出哪些過程定義在哪些檔案中,並把索引儲存到目錄
dir下乙個叫
tclindex
的檔案中。如果修改了檔案或者增減過程,需要重新生成索引。
第三步是在應用中設定變數
auto_path
,把存放了希望使用到的庫所在的目錄賦給它。
auto_path
變數包含了乙個目錄的列表,當自動載入被啟動的時候,會搜尋
auto_path
中所指的目錄,檢查各目錄下的
tclindex
檔案來確認過程被定義在哪個檔案中。如果乙個函式被定義在幾個庫中,則自動載入使用在
auto_path
中靠前的那個庫。
例如,若乙個應用使用目錄
/usr/local/tcl/lib/shapes
下的庫,則在啟動描述中應增加:
set auto_path [linsert $auto_path 0 /usr/local/tcl/lib/shapes]
這將把/usr/local/tcl/lib/shapes
作為起始搜尋庫的路徑,同時保持所有的
tcl/tk
庫不變,但是在
/usr/local/tcl/lib/shapes
中定義的過程具有更高的優先順序,一旦乙個含有索引的目錄加到了
auto_path
中,裡面所有的過程都可以通過自動載入使用了。
PHP中的自動載入
為什麼需要自動載入?在php5之前,如果需要引入外部的檔案,那麼需要通過include和require命令。如果只是小專案,那麼倒也沒什麼問題,但是當我們做大型專案的時候,大量的include require則會有很多缺點 解決方案 在php5之後,zend提供了 autoload函式 functi...
php自動載入類,PHP中類的自動載入的方法
類的自動載入是指,在外面的頁面中,並不需要去 引入 類檔案,但是程式會在需要的時候動態載入需要的類檔案。方法1 使用 autoload魔術函式 當程式需要某個類時,就會去呼叫該函式,該函式我們需要自己去定義並在其中寫好載入類檔案的通用語句。需要類是自動呼叫,而且會傳進來乙個類名,這個案例的檔名為21...
PHP中類的自動載入
首先認識乙個函式 spl autoload register 官方文件 spl autoload register 滿足了多條 autoload 的需求。它實際上建立了 autoload 函式的佇列,按定義時的順序逐個執行。相比之下,autoload 只可以定義一次。沒啥好說的,上段 functio...