Tcl script中的自動載入

2021-04-14 16:49:58 字數 1751 閱讀 3500

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...