Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
[Photo of the Author]
by Brent B. Welch

About the author:
Brent Welch 目前正有興趣於建立一個 www.scriptics.com 網站, 包括一個收集Tcl有關 的 URLs ( Tcl資源中心) 並加上註解的資料庫和一個TclPro Product的電子商務建設 (ecommerce infrastructure) 。他也在開發幾個大型的 Tcl/Tk應用程式,包括有在 www.scriptics.com 網站上執行的Tcl Httpd web 伺服器、Exmh 郵件使用者介面和 webtk HTML 編輯器。他是 " Tcl 和 Tk 程式設計實務 (Practical Programming in Tcl and Tk)" 一書的作者。Welch 於1982年在科羅拉多州Boulder大學航空工程系獲得 學士學位, 1986年在加州Berkeley大學取得資訊工程碩士學位, 1990年在加州Berkeley 大學取得資訊工程博士學位。Welch先前是 Xerox公司 PARC研究中心研究員之一成員, 研究分散式系統 (distributed systems)。然後他加入 Sun Microsystems 實驗室之 Tcl/Tk小組成員。他也是美國電腦協會(ACM)和國際電子工程師協會 (IEEE) 的會員。 首頁位址:http://www.beedub.com/

Content:

Tcl 語法

[Ilustration]

Abstract:

這篇文章介紹了Tcl語言的基本觀念和語法。



 

Tcl語法簡介

以一種腳本語言來說, Tcl具有簡單的語法。

cmd arg arg arg
一個Tcl命令是由空白分隔的關鍵字所組成。其中, 第一個字是命令名稱, 其餘的是命 令參數 .
$foo
錢符號 ($) 取代了變數的值。在本例中, 變數名稱是 foo.
[clock seconds]
方括號執行了一個巢狀命令 (nested command)。例如, 如果你想傳遞一個命令的結果作?另外一個命令的參數, 那麼你必須使用這種語法。在這個例子中, 巢狀命令是 clock seconds, 它提供目前時間的秒數。
"some stuff"
雙引號將多個字標記成?命令的一個單獨參數。錢符號 $ 和方括號在雙引號內會被解譯。
{some stuff}
大括弧也會把多個字標記?命令的一個單獨參數。不過在這個例子中其他符號在大括弧內不被解譯。
\
反斜線符號(\) 是用來引用特殊符號。例如:\n 會產生換行。反斜線符號也被用來 "關閉" 錢符號 $、引號、方括號和大括弧的特殊意義。
 

一個小例子

下面是一個Tcl 命令用來列出目前時間。它使用了三個Tcl命令 : set, clock,和 puts. set 命令將值設定給變數。clock 命令處理時間變數。 puts 命令列出結果。

set seconds [clock seconds] puts "The time is [clock format $seconds]"

注意一下在設定值給變數時並未使用 $ 符號。只有在使用變數時才使用 $ 符號。在上個例子中 seconds 變數並不是必須的。你可使用一個命令來列印出目前的時間:

puts "The time is [clock format [clock seconds]]"

 

群組和替代

利用Tcl parser 剖析Tcl語法必須使用以下三個步驟: 將參數分成群組, 結果替代和命令指派

  1. 將參數分成群組. Tcl需要決定如何組織命令的參數。在最簡單的情況中, 直接利用空白分隔參數。先前提到過, 引號和括弧語法可讓多個關鍵字組成一個參數。在前個例子中, 雙引號用來組成 puts命令的一個參數。

  2. 結果替代. 在參數分成群組後, Tcl執行字串替代。Put命令中, 只是簡單用變數 $foo的值替代了 foo, 用結果替代了括弧命令。替代是在分組之後進行的。這種次序使特別的值並未使命令結構變複雜.

  3. 命令指派. 在結果替代後, Tcl 使用命令名稱當做鍵值來搜尋指派表 (Dispatch Table) , 它呼叫表中相對應的 C 程序, 然後此 C 程序是用來執行命令的。你也可使用 Tcl 來撰寫命令程序。而此種程序在參數傳遞與錯誤處理中有一些簡單的規定。
 

另一個例子

下面是另一個例子:

set i 0 while {$i < 10} { puts "$i squared = [expr $i*$i]" incr i }

在此處, 大括弧用來將參數分組, 且並沒有做任何替代。 Tcl parser 了解 while命令並沒有特別的地方, 就像對待其它的一般命令一樣。 while 命令利用 Tcl Parser 執行, 可知道第一個參數是運算式, 而第二個參數則是多個 Tcl 命令。 大括弧將它分成兩個參數:邏輯運算式與控制迴圈, Tcl 命令在迴圈部分。

我們看到了兩個數學運算式: 布林代數比較和乘法運算。while 命令自動將一個參數值當作運算式來計算。在其他的情況下, 您要明確使用 expr 命令來執行數學運算  

命令指派

最後, Tcl 呼叫其它程序來處理困難的工作。我們已經可看到 Tcl 使用 expr命令來執行數學函數, puts 命令來處理輸出功能, set 命令來設定值給變數。這些 Tcl 命令是透過本身已在 Tcl 中登錄過 (Registered) 的 C 語言程序來執行的。C 語言的命令程序由 Tcl 命令取得字串參數, 然後傳回一個結果為一個新的字串。想要撰寫 C 語言命令程序很簡單。它可以做任何事情, 包括存取資料庫和建立圖形使用者介面。Tcl語言, 並不知道命令會有什麼樣的功用 , 它只是利用參數分群組, 結果替代和命令指派三步驟來執行命令。  

最後一個例子

這裡是一個階乘程序:

proc fac {x} {
    if {$x < 0} {
        error "Invalid argument $x: must be a positive integer"
    } elseif {$x <= 1} {
        return 1
    } else {
        return [expr $x * [fac [expr $x-1]]]
    }
}


 

更進一步的閱讀

本文出處: Scriptics
中文翻譯: 徐子淵 (Kevin Hsu)
Webpages maintained by the LinuxFocus Editor team
© Brent B. Welch
LinuxFocus 1999
Translation information:
en -> -- Brent B. Welch
en -> cn Kevin Hsu

1999-10-28, generated by lfparser version 0.8