TCL語言概述
這里的 if 命令接受兩個參數(shù),每個都是用花括號界定的。If 是內(nèi)置命令,它把它的第一個參數(shù)作為表達式來求值;如果結(jié)果非零,則 if 把它的第二個參數(shù)作為 Tcl 命令執(zhí)行。這個特定命令在變量 a 小于 b 的時候交換 a 和 b 的值。
Tcl 還允許用戶定義用 Tcl 語言寫的命令過程。我稱謂這些過程為 tclproc,為的是區(qū)別于用 C 寫成的其他過程。使用 proc 內(nèi)置命令來建立 tclproc。例如,下面定義了一個遞歸的階乘過程的 Tcl 命令:
proc fac x {
if {$x == 1} {return 1}
return [expr {$x * [fac [expr $x-1]]}]
}
proc 命令接受三個參數(shù):新 tclproc 的名字、一個變量名字的列表(在這個實例中試只有一個元素 x 的列表),和一個構(gòu)成 tclproc 的過程體的 Tcl 命令。一旦執(zhí)行了這個 proc 命令,fac 就可以同其他 Tcl 命令一樣調(diào)用了。例如
fac 4
將返回字符串“24”。
盡管內(nèi)置 Tcl 命令可以令人信服的用作獨立的編程系統(tǒng),Tcl 實際上意圖被嵌入到應(yīng)用程序中。我已經(jīng)建造了使用 Tcl 的幾個應(yīng)用程序,其中之一是針對 X 的叫做 mx 的一個基于鼠標的編輯器。在本文的余下部分,我將使用來自 mx 的例子來展示 Tcl 如何與包圍它的應(yīng)用進行交互。
使用 Tcl 的應(yīng)用程序用同特定應(yīng)用有關(guān)的一些額外的命令來擴展內(nèi)置命令。例如,時鐘程序可以提供額外的命令來控制時鐘如何顯示和設(shè)置鬧鐘;mx 編輯器提供額外的命令來從磁盤讀取文件,在窗口中顯示它,選擇和修改一定范圍內(nèi)的字節(jié),和把修改后的文件寫回磁盤。應(yīng)用程序員只需要寫特定于應(yīng)用的命令;內(nèi)置命令“免費的”提供編程能力和擴展能力。對于用戶,特定于應(yīng)用的命令表現(xiàn)的如同內(nèi)置命令一樣。
Tcl 和窗口應(yīng)用
可嵌入的命令語言如 Tcl 在窗口環(huán)境中提供了特別的好處。部分原因是在窗口環(huán)境中有很多交互式程序(所以有很多地方要使用命令語言),部分的原因是在今天的窗口環(huán)境中可配置性是重要的,并且語言如 Tcl 提供了做重新配置的靈活性。Tcl 在窗口應(yīng)用中可以用于兩個目的: 配置應(yīng)用的界面動作,配置應(yīng)用的界面外觀。在下面的段落中討論這兩個用途。
Tcl 的第一個用法是用于界面動作。理想的,對應(yīng)用重要的每個事件都應(yīng)當綁定上 Tcl 命令。每次擊鍵、每次鼠標移動或鼠標按鈕按下(或釋放)、和每個菜單條目都應(yīng)當關(guān)聯(lián)上 Tcl 命令。
當事件發(fā)生時,首先把它映射到它的 Tcl 命令上,接著通過把這個命令傳遞到 Tcl_Eval 來執(zhí)行它。應(yīng)用不應(yīng)當直接接收任何動作;所有動作都應(yīng)當首先通過 Tcl 來傳遞。進一步,應(yīng)用應(yīng)當提供 Tcl 命令允許用戶改變與任何事件相關(guān)聯(lián)的 Tcl 命令。
在交互式的窗口應(yīng)用中,Tcl 的使用可能對于初級用戶是不可見的: 他們將使用按鈕、菜單和其他界面構(gòu)件來操縱應(yīng)用。但是,如果使用 Tcl 作為所有界面動作的中間媒介,則會產(chǎn)生兩個好處。首先,使得寫 Tcl 程序來重新配置界面成為可能。例如,用戶將能夠重新綁定擊鍵、改變鼠標按鈕、或把一個現(xiàn)存的操作替代為指定為一組 Tcl 命令或 tclproc 的更加復(fù)雜的操作。第二個好處是這種方式強制所有的應(yīng)用的功能都可通過 Tcl 來訪問: 任何可以使用鼠標或鍵盤調(diào)用的東西都可以使用 Tcl 程序調(diào)用。這使得有可能寫模擬程序動作的 tclproc,或把程序的基本動作組合到更加強力的動作中。這還允許交互式會話作為一序列 Tcl 命令而被記錄和重演。本文引用地址:http://butianyuan.cn/article/148733.htm
評論