Tcl script中的自動加載

unknown過程中一項非常有用的功能就是自動加載,自動加載功能允許你編寫一組Tcl過程放到一個腳本文件中,然後把該文件放到庫目錄之下,當程序調用這些過程的時候,第一次調用時由於命令還不存在就會進入unknown命令,而unknown則會找到在哪個庫文件中包含了這個過程的定義,接着會加載它,再去重新執行命令,而到下次使用剛纔調用過的命令的時候,由於它已經存在了,從而會正常的執行命令,自動加載機制也就不會被再次啓動。
自動加載提供了兩個好處,首先,你可以把有用的過程建立爲過程庫,而你無需精確知道過程的定義到底在哪個源文件中,自動加載機制會自動替你尋找,第二個好處在於自動加載是非常有效率的,如果沒有自動加載機制你將不得不在TCL應用的開頭使用source命令來加載所有可能用到的庫文件,而應用自動加載機制,應用啓動時無需加載任何庫文件,而且有些用不到的庫文件永遠都不會被加載,既縮短了啓動時間又節省了內存。
使用自動加載只需簡單的按下面三步來做:
第一,在一個目錄下創建一組腳本文件作爲庫,一般這些文件都以".tcl"結尾。每個文件可以包含任意數量的過程定義。建議儘量減少各腳本文件之間的關聯,讓相互關聯的過程位於同一個文件中。爲了能夠讓自動加載功能正確運行,proc命令定義一定要頂到最左邊,並且與函數名用空格分開,過程名保持與proc在同一行上。
第二步,爲自動加載建立索引。啓動Tcl應用比如tclsh,調用命令auto_mkindex dir 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中,裏面所有的過程都可以通過自動加載使用了。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章