




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、TCL培訓教程(全)(內(nèi)部使用)深圳市華為技術(shù)有限公司目 錄1引言62語法72.1腳本、命令和單詞符號72.2置換(substitution)72.2.1變量置換(variable subtitution)82.2.2命令置換(command substitution)82.2.3反斜杠置換(backslash substitution)92.2.4雙引號和花括號102.3注釋103變量113.1簡單變量113.2數(shù)組123.3相關(guān)命令123.3.1set123.3.2unset123.3.3append和incr134表達式134.1操作數(shù)134.2運算符和優(yōu)先級141.1數(shù)學函數(shù)142Li
2、st162.1list命令162.2concat命令:162.3lindex命令162.4llength命令162.5linsert命令162.6lreplace命令:172.7lrange 命令:172.8lappend命令:172.9lsearch 命令:172.10lsort命令:182.11split命令:182.12join命令193控制流193.1if命令193.2循環(huán)命令:while 、for、 foreach193.2.1while命令193.2.2for命令203.2.3foreach命令203.2.4break和continue命令213.2.5switch 命令213.3
3、eval命令223.4source命令224過程(procedure)224.1過程定義和返回值224.2局部變量和全局變量234.3缺省參數(shù)和可變個數(shù)參數(shù)234.4引用:upvar245字符串操作265.1format命令265.2scan命令265.3regexp命令271.1regsub命令281.2string命令291.2.1string compare ?-nocase? ?-length int? string1 string2291.2.2string equal ?-nocase? ?-length int? string1 string2291.2.3string firs
4、t string1 string2 ?startindex?291.2.4string index string charIndex301.2.5string last string1 string2 ?startindex?301.2.6string length string301.2.7string match ?-nocase? pattern string301.2.8string range string first last311.2.9string repeat string count311.2.10string replace string first last ?news
5、tring?311.2.11string tolower string ?first? ?last?311.2.12string toupper string ?first? ?last?311.2.13string trim string ?chars?311.2.14string trimleft string ?chars?321.2.15string trimright string ?chars?322文件訪問322.1文件名322.2基本文件輸入輸出命令322.3隨機文件訪問342.4當前工作目錄342.5文件操作和獲取文件信息353錯誤和異常393.1錯誤403.2從TCL腳本中
6、產(chǎn)生錯誤413.3使用catch捕獲錯誤413.4其他異常421深入TCL441.1查詢數(shù)組中的元素441.2info命令461.2.1變量信息461.1.1過程信息481.1.2命令信息491.1.3TCL的版本和庫491.1.4命令的執(zhí)行時間491.1.5跟蹤變量501.1.6命令的重命名和刪除531.1.7unknown命令531.1.8自動加載542歷史記錄553TCL和CC+583.1生成自己的TCLSH583.2擴展自己的命令:方法(一)593.2.1編寫擴展命令對應(yīng)的C/C+過程593.2.2注冊命令613.2.3命令返回值和命令對應(yīng)的過程的返回值623.3擴展自己的命令:方法(
7、二)643.3.1Tcl_Obj結(jié)構(gòu)643.3.2編寫擴展命令對應(yīng)的C/C+過程663.3.3注冊命令673.4利用clientData參數(shù)和deleteProc參數(shù)673.5在C/C+應(yīng)用程序中嵌入TCL714總結(jié)72TCL培訓教程(全)關(guān)鍵詞:TCL 摘 要:本文是TCL教材的第三稿,前兩稿分別是TCL的使用和TCL培訓教程。這一稿加入了不少內(nèi)容,是北研TCL興趣小組共同努力的結(jié)果。本文詳細介紹了TCL的各個方面,特別對利用CC+語言擴展TCL命令作了詳細論述。本文附有大量實例??s略語清單: TCL Tool Command Language 一種腳本語言參考資料清單: 請在表格中羅列本文
8、檔所引用的有關(guān)參考文獻名稱、作者、標題、編號、發(fā)布日期和出版單位等基本信息。參考資料清單名稱作者編號發(fā)布日期查閱地點或渠道出版單位(若不為本公司發(fā)布的文獻,請?zhí)顚懘肆校㏕cl and Tk ToolKitJohn K.Ousterhout98123595161999自己的圖書Addison Wesley Publishing CommpanyTCL的使用陳旭盛自寫文檔TCL培訓教程陳旭盛自寫文檔1 引言TCL(Tool Command Language)是一種解釋執(zhí)行的腳本語言(Scripting Language)。 它提供了通用的編程能力:支持變量、過程和控制結(jié)構(gòu);同時TCL還擁有一個功能
9、強大的固有的核心命令集。由于TCL的解釋器是用一個CC+語言的過程庫實現(xiàn)的,因此在某種意義上我們又可以把TCL看作一個C庫,這個庫中有豐富的用于擴展TCL命令的CC+過程和函數(shù),可以很容易就在CC+應(yīng)用程序中嵌入TCL,而且每個應(yīng)用程序都可以根據(jù)自己的需要對TCL語言進行擴展。我們可以針對某一特定應(yīng)用領(lǐng)域?qū)CL語言的核心命令集進行擴展,加入適合于自己的應(yīng)用領(lǐng)域的擴展命令,如果需要,甚至可以加入新的控制結(jié)構(gòu),TCL解釋器將把擴展命令和擴展控制結(jié)構(gòu)與固有命令和固有控制結(jié)構(gòu)同等看待。擴展后的TCL語言將可以繼承TCL 核心部分的所有功能,包括核心命令、控制結(jié)構(gòu)、數(shù)據(jù)類型、對過程的支持等。根據(jù)需要,
10、我們甚至可以屏蔽掉TCL的某些固有命令和固有控制結(jié)構(gòu)。通過對TCL的擴展、繼承或屏蔽,用戶用不著象平時定義一種計算機語言那樣對詞法、語法、語義、語用等各方面加以定義,就可以方便的為自己的應(yīng)用領(lǐng)域提供一種功能完備的腳本語言。TCL良好的可擴展性使得它能很好地適應(yīng)產(chǎn)品測試的需要,測試任務(wù)常常會由于設(shè)計和需求的改變而迅速改變,往往讓測試人員疲于應(yīng)付。利用TCL的可擴展性,測試人員就可以迅速繼承多種新技術(shù),并針對產(chǎn)品新特點迅速推出擴展TCL命令集,以用于產(chǎn)品的測試中,可以較容易跟上設(shè)計需求的變化。另外,因為TCL是一種比CC+ 語言有著更高抽象層次的語言,使用TCL可以在一種更高的層次上編寫程序,它屏
11、蔽掉了編寫CC+程序時必須涉及到的一些較為煩瑣的細節(jié),可以大大地提高開發(fā)測試例的速度。而且, 使用TCL語言寫的測試例腳本,即使作了修改,也用不著重新編譯就可以調(diào)用TCL解釋器直接執(zhí)行。可以省卻不少時間。TCL 目前已成為自動測試中事實上的標準。2 語法簡單的講,TCL語言的語法實際上是一些TCL解釋器怎樣對TCL命令進行分析的規(guī)則的集合。2.1 腳本、命令和單詞符號一個TCL腳本可以包含一個或多個命令。命令之間必須用換行符或分號隔開,下面的兩個腳本都是合法的:set a 1set b 2或set a 1;set b 2TCL的每一個命令包含一個或幾個單詞,第一個單詞代表命令名,另外的單詞則是
12、這個命令的參數(shù),單詞之間必須用空格或TAB鍵隔開。TCL解釋器對一個命令的求值過程分為兩部分:分析和執(zhí)行。在分析階段,TCL 解釋器運用規(guī)則把命令分成一個個獨立的單詞,同時進行必要的置換(substitution); 在執(zhí)行階段,TCL 解釋器會把第一個單詞當作命令名,并查看這個命令是否有定義,如果有定義就激活這個命令對應(yīng)的C/C+過程,并把所有的單詞作為參數(shù)傳遞給該命令過程,讓命令過程進行處理。2.2 置換(substitution)注:在下面的所有章節(jié)的例子中,為TCL的命令提示符,輸入命令回車后,TCL會在接著的一行輸出命令執(zhí)行結(jié)果。/后面是我自己加上的說明,不是例子的一部分。TCL解釋
13、器在分析命令時,把所有的命令參數(shù)都當作字符串看待,例如:%set x 10 /定義變量x,并把x的值賦為1010%set y x+100 /y的值是x+100,而不是我們期望的110x+100上例的第二個命令中,x被看作字符串x+100的一部分,如果我們想使用x的值10 ,就必須告訴TCL解釋器:我們在這里期望的是變量x的值,而非字符x。怎么告訴TCL解釋器呢,這就要用到TCL語言中提供的置換功能。TCL提供三種形式的置換:變量置換、命令置換和反斜杠置換。每種置換都會導致一個或多個單詞本身被其他的值所代替。置換可以發(fā)生在包括命令名在內(nèi)的每一個單詞中,而且置換可以嵌套。2.2.1 變量置換(va
14、riable subtitution)變量置換由一個符號標記,變量置換會導致變量的值插入一個單詞中。例如:%set y $x+100 /y的值是10+100,這里x被置換成它的值1010100這時,y的值還不是我們想要的值110,而是10+100,因為TCL解釋器把10+100看成是一個字符串而不是表達式,y要想得到值110,還必須用命令置換,使得TCL會把10+100看成一個表達式并求值。2.2.2 命令置換(command substitution)命令置換是由括起來的TCL命令及其參數(shù),命令置換會導致某一個命令的所有或部分單詞被另一個命令的結(jié)果所代替。例如:%set y expr $x+
15、100110y的值是110,這里當TCL解釋器遇到字符時,它就會把隨后的expr作為一個命令名,從而激活與expr對應(yīng)的C/C+過程,并把expr和變量置換后得到的10+110傳遞給該命令過程進行處理。如果在上例中我們?nèi)サ?,那么TCL會報錯。因為在正常情況下,TCL解釋器只把命令行中的第一個單詞作為看作命令,其他的單詞都作為普通字符串處理,看作是命令的參數(shù)。 注意,中必須是一個合法的TCL腳本,長度不限。中腳本的值為最后一個命令的返回值,例如:%set y expr $x+100;set b 300 /y的值為300,因為set b 300的返回值為300300有了命令置換,實際上就表示命令之
16、間是可以嵌套的,即一個命令的結(jié)果可以作為別的命令的參數(shù)。2.2.3 反斜杠置換(backslash substitution)TCL語言中的反斜杠置換類似于C語言中反斜杠的用法,主要用于在單詞符號中插入諸如換行符、空格、$等被TCL解釋器當作特殊符號對待的字符。例如:set msg multiple space /msg的值為multiple space。如果沒有的話,TCL會報錯,因為解釋器會把這里最后兩個單詞之間的空格認為是分隔符,于是發(fā)現(xiàn)set命令有多于兩個參數(shù),從而報錯。加入了后,空格不被當作分隔符,multiple space被認為是一個單詞(word)。又例如: %set msg
17、money $3333 nArray a2 /這個命令的執(zhí)行結(jié)果為:money $3333 Array a2這里的$不再被當作變量置換符。TCL支持以下的反斜杠置換:Backslash Sequence Replaced Bya Audible alert (0x7)b Backspace (0x8)f Form feed (0xc)n Newline (0xa)r Carriage return (0xd)t Tab (0x9)v Vertical tab (0xb)ddd Octal value given by ddd(one, two, or three ds)xhh Hex valu
18、e given by hh(any number of hs) newline space A single space character.例如: set a x48 /對應(yīng) xhhH /十六進制的48正好是72,對應(yīng)H set a 110 /對應(yīng) dddH /八進制的110正好是72,對應(yīng)Hset a expr / 對應(yīng)newline space,一個命令可以用newline轉(zhuǎn)到下一行繼續(xù) 2+352.2.4 雙引號和花括號 除了使用反斜杠外,TCL提供另外兩種方法來使得解釋器把分隔符和置換符等特殊字符當作普通字符,而不作特殊處理,這就要使用雙引號和花括號()。TCL解釋器對雙引號中的各種
19、分隔符將不作處理,但是對換行符 及和兩種置換符會照常處理。例如:%set x 100100%set y $x ddd 100 ddd而在花括號中,所有特殊字符都將成為普通字符,失去其特殊意義,TCL解釋器不會對其作特殊處理。%set y /n$x expr 10+100 /n$x expr 10+100 2.3 注釋TCL中的注釋符是,和直到所在行結(jié)尾的所有字符都被TCL看作注釋,TCL解釋器對注釋將不作任何處理。不過,要注意的是,必須出現(xiàn)在TCL解釋器期望命令的第一個字符出現(xiàn)的地方,才被當作注釋。例如:%This is a comment%set a 100 # Not a commentw
20、rong # args: should be set varName ?newValue?%set b 101 ; # this is a comment101第二行中就不被當作注釋符,因為它出現(xiàn)在命令的中間,TCL解釋器把它和后面的字符當作命令的參數(shù)處理,從而導致錯誤。而第四行的就被作為注釋,因為前一個命令已經(jīng)用一個分號結(jié)束,TCL解釋器期望下一個命令接著出現(xiàn)?,F(xiàn)在在這個位置出現(xiàn)#,隨后的字符就被當作注釋了。3 變量TCL支持兩種類型的變量:簡單變量和數(shù)組。3.1 簡單變量 一個TCL的簡單變量包含兩個部分:名字和值。名字和值都可以是任意字符串。例如一個名為 “1323 7&*: hdgg的
21、變量在TCL中都是合法的。不過為了更好的使用置換(substitution),變量名最好按CC+語言中標識符的命名規(guī)則命名。 TCL解釋器在分析一個變量置換時,只把從符號往后直到第一個不是字母、數(shù)字或下劃線的字符之間的單詞符號作為要被置換的變量的名字。例如:% set a 22set a.1 44% set b $a.12.1在最后一個命令行,我們希望把變量a.1的值付給b,但是TCL解釋器在分析時只把$符號之后直到第一個不是字母、數(shù)字或下劃線的字符(這里是.)之間的單詞符號(這里是a)當作要被置換的變量的名字,所以TCL解釋器把a置換成2,然后把字符串“2.1”付給變量b。這顯然與我們的初衷
22、不同。當然,如果變量名中有不是字母、數(shù)字或下劃線的字符,又要用置換,可以用花括號把變量名括起來。例如:%set b $a.14TCL中的set命令能生成一個變量、也能讀取或改變一個變量的值。例如: set a kdfj kjdfkdfj kjdf如果變量a還沒有定義,這個命令將生成 變量a,并將其值置為kdfj kjdf,若a已定義,就簡單的把a的值置為kdfj kjdf。set akdfj kjdf 這個只有一個參數(shù)的set命令讀取a的當前值kdfj kjdf。 3.2 數(shù)組 數(shù)組是一些元素的集合。TCL的數(shù)組和普通計算機語言中的數(shù)組有很大的區(qū)別。在TCL中,不能單獨聲明一個數(shù)組,數(shù)組只能和
23、數(shù)組元素一起聲明。數(shù)組中,數(shù)組元素的名字包含兩部分:數(shù)組名和數(shù)組中元素的名字,TCL中數(shù)組元素的名字(下標可以為任何字符串。例如: set day(monday) 1 set day(tuesday) 2 第一個命令生成一個名為day的數(shù)組,同時在數(shù)組中生成一個名為monday的數(shù)組元素,并把值置為1,第二個命令生成一個名為tuesday的數(shù)組元素,并把值置為2。 簡單變量的置換已經(jīng)在前一節(jié)討論過,這里講一下數(shù)組元素的置換。除了有括號之外,數(shù)組元素的置換和簡單變量類似。例: set a mondayset day(monday) 1set b $day(monday) /b的值為1,即day(
24、monday)的值。set c $day($a) /c的值為1,即day(monday)的值。TCL不能支持復雜的數(shù)據(jù)類型,這是一個很大的缺憾,也是TCL受指責很多的方面。但是TCL的一個擴展ITCL填補了這個缺憾。3.3 相關(guān)命令3.3.1 set這個命令在3.1已有詳細介紹。3.3.2 unset 這個命令從解釋器中刪除變量,它后面可以有任意多個參數(shù),每個參數(shù)是一個變量名,可以是簡單變量,也可以是數(shù)組或數(shù)組元素。例如:% unset a b day(monday)上面的語句中刪除了變量a、b和數(shù)組元素day(monday),但是數(shù)組day并沒有刪除,其他元素還存在,要刪除整個數(shù)組,只需給出
25、數(shù)組的名字。例如:%puts $day(monday)cant read day(monday): no such element in array% puts $day(tuesday)2%unset day% puts $day(tuesday)cant read day(tuesday): no such variable3.3.3 append和incr這兩個命令提供了改變變量的值的簡單手段。append命令把文本加到一個變量的后面,例如:% set txt hellohello% append txt ! How are youhello! How are youincr命令把一個變
26、量值加上一個整數(shù)。incr要求變量原來的值和新加的值都必須是整數(shù)。%set b aa% incr bexpected integer but got a%set b 22%incr b 354 表達式TCL中的表達式類似于ANSI C的表達式。表達式由操作數(shù)和操作符構(gòu)成,下面分別介紹。4.1 操作數(shù)TCL表達式的操作數(shù)通常是整數(shù)或?qū)崝?shù)。整數(shù)一般是十進制的, 但如果整數(shù)的第一個字符是0(zero),那么TCL將把這個整數(shù)看作八進制的,如果前兩個字符是0x則這個整數(shù)被看作是十六進制的。TCL的實數(shù)的寫法與ANSI C中完全一樣。如:2.17.9e+126e43. 4.2 運算符和優(yōu)先級 下面的表格
27、中列出了TCL中用到的運算符,它們的語法形式和用法跟ANSI C中很相似。這里就不一一介紹。下表中的運算符是按優(yōu)先級從高到低往下排列的。同一格中的運算符優(yōu)先級相同。語法形式結(jié)果操作數(shù)類型-a!aa負a非aint,floatint,floatinta*ba/ba%b乘除取模int,floatint,floatinta+ba-b加減int,floatint,floatab左移位右移位intintaba=b小于大于小于等于大于等于int,float,stringint,float,stringint,float,stringint,float,stringa= =ba!=b等于不等于int,floa
28、t,stringint,float,stringa&b位操作與intab位操作異或inta|b位操作或inta&b邏輯與int,floata|b邏輯或int,floata?b:c選擇運算a:int,float 1.1 數(shù)學函數(shù)TCL支持常用的數(shù)學函數(shù),表達式中數(shù)學函數(shù)的寫法類似于CC+語言的寫法,數(shù)學函數(shù)的參數(shù)可以是任意表達式,多個參數(shù)之間用逗號隔開。例如:%set x 22% expr 2* sin($x0 . elseif $x1 . elseif $x2 . else . 注意,上例中一定要寫在上一行,因為如果不這樣,TCL 解釋器會認為if命令在換行符處已結(jié)束,下一行會被當成新的命令,
29、從而導致錯誤的結(jié)果。在下面的循環(huán)命令的書寫中也要注意這個問題。書寫中還要注意的一個問題是if 和之間應(yīng)該有一個空格,否則TCL解釋器會把if作為一個整體當作一個命令名,從而導致錯誤。3.2 循環(huán)命令:while 、for、 foreach3.2.1 while命令語法為: while test body參數(shù)test是一個表達式,body是一個腳本,如果表達式的值非0,就運行腳本,直到表達式為0才停止循環(huán),此時while命令中斷并返回一個空字符串。例如:假設(shè)變量 a 是一個鏈表,下面的腳本把a 的值復制到b:set b set i expr llength $a -1while $i=0lapp
30、end b lindex $a $iincr i -13.2.2 for命令語法為: for init test reinit body參數(shù)init是一個初始化腳本,第二個參數(shù)test是一個表達式,用來決定循環(huán)什么時候中斷,第三個參數(shù)reinit是一個重新初始化的腳本,第四個參數(shù)body也是腳本,代表循環(huán)體。下例與上例作用相同:set b for set i expr llength $a -1 $i=0 incr i -1 lappend b lindex $a $i 3.2.3 foreach命令這個命令有兩種語法形式1。 foreach varName list body第一個參數(shù)var
31、Name是一個變量,第二個參數(shù)list 是一個表(有序集合),第三個參數(shù)body是循環(huán)體。每次取得鏈表的一個元素,都會執(zhí)行循環(huán)體一次。 下例與上例作用相同:set b foreach i $aset b linsert $b 0 $i2。 foreach varlist1 list1 ?varlist2 list2 .? Body這種形式包含了第一種形式。第一個參數(shù)varlist1是一個循環(huán)變量列表,第二個參數(shù)是一個列表list1,varlist1中的變量會分別取list1中的值。body參數(shù)是循環(huán)體。 ?varlist2 list2 .?表示可以有多個變量列表和列表對出現(xiàn)。例如:set x
32、foreach i j a b c d e f lappend x $j $i這時總共有三次循環(huán),x的值為b a d c f e。set x foreach i a b c j d e f g lappend x $i $j這時總共有四次循環(huán),x的值為a d b e c f g。set x foreach i a b c j k d e f g lappend x $i $j $k這時總共有三次循環(huán),x的值為a d e b f g c 。3.2.4 break和continue命令 在循環(huán)體中,可以用break和continue命令中斷循環(huán)。其中break命令結(jié)束整個循環(huán)過程,并從循環(huán)中跳出,
33、continue只是結(jié)束本次循環(huán)。3.2.5 switch 命令和C語言中switch語句一樣,TCL中的switch命令也可以由if命令實現(xiàn)。只是書寫起來較為煩瑣。 switch命令的語法為: switch ? options? string pattern body ? pattern body .? 第一個是可選參數(shù)options,表示進行匹配的方式。TCL支持三種匹配方式:-exact方式,-glob方式,-regexp方式,缺省情況表示-glob方式。-exact方式表示的是精確匹配,-glob方式的匹配方式和string match 命令的匹配方式相同(第八節(jié)介紹),-regexp
34、方式是正規(guī)表達式的匹配方式(第八節(jié)介紹)。第二個參數(shù)string 是要被用來作測試的值,第三個參數(shù)是括起來的一個或多個元素對,例:switch $x a -b incr t1c incr t2default incr t3其中a的后面跟一個表示使用和下一個模式相同的腳本。default表示匹配任意值。一旦switch命令 找到一個模式匹配,就執(zhí)行相應(yīng)的腳本,并返回腳本的值,作為switch命令的返回值。3.3 eval命令eval命令是一個用來構(gòu)造和執(zhí)行TCL腳本的命令,其語法為:eval arg ?arg .?它可以接收一個或多個參數(shù),然后把所有的參數(shù)以空格隔開組合到一起成為一個腳本,然后對
35、這個腳本進行求值。例如:eval set a 2 ;set b 443.4 source命令source命令讀一個文件并把這個文件的內(nèi)容作為一個腳本進行求值。例如:source e:/tcl&c/hello.tcl 注意路徑的描述應(yīng)該和UNIX相同,使用/而不是。4 過程(procedure)TCL支持過程的定義和調(diào)用,在TCL中,過程可以看作是用TCL腳本實現(xiàn)的命令,效果與TCL的固有命令相似。我們可以在任何時候使用proc命令定義自己的過程,TCL中的過程類似于C中的函數(shù)。4.1 過程定義和返回值TCL中過程是由proc命令產(chǎn)生的:例如:% proc add x y expr $x+$yp
36、roc命令的第一個參數(shù)是你要定義的過程的名字,第二個參數(shù)是過程的參數(shù)列表,參數(shù)之間用空格隔開,第三個參數(shù)是一個TCL腳本,代表過程體。 proc生成一個新的命令,可以象固有命令一樣調(diào)用:% add 1 2 3 在定義過程時,你可以利用return命令在任何地方返回你想要的值。 return命令迅速中斷過程,并把它的參數(shù)作為過程的結(jié)果。例如:% proc abs x if $x = 0 return $x return expr -$x過程的返回值是過程體中最后執(zhí)行的那條命令的返回值。4.2 局部變量和全局變量 對于在過程中定義的變量,因為它們只能在過程中被訪問,并且當過程退出時會被自動刪除,所
37、以稱為局部變量;在所有過程之外定義的變量我們稱之為全局變量。TCL中,局部變量和全局變量可以同名,兩者的作用域的交集為空:局部變量的作用域是它所在的過程的內(nèi)部;全局變量的作用域則不包括所有過程的內(nèi)部。這一點和C語言有很大的不同. 如果我們想在過程內(nèi)部引用一個全局變量的值,可以使用global命令。例如:% set a 44% proc sample x global aincr a return expr $a+$x% sample 38%set a5 全局變量a在過程中被訪問。在過程中對a的改變會直接反映到全局上。如果去掉語句global a,TCL會出錯,因為它不認識變量a. 4.3 缺省
38、參數(shù)和可變個數(shù)參數(shù)TCL還提供三種特殊的參數(shù)形式:首先,你可以定義一個沒有參數(shù)的過程,例如:proc add expr 2+3其次,可以定義具有缺省參數(shù)值的過程,我們可以為過程的部分或全部參數(shù)提供缺省值,如果調(diào)用過程時未提供那些參數(shù)的值,那么過程會自動使用缺省值賦給相應(yīng)的參數(shù)。和CC+中具有缺省參數(shù)值的函數(shù)一樣,有缺省值的參數(shù)只能位于參數(shù)列表的后部,即在第一個具有缺省值的參數(shù)后面的所有參數(shù),都只能是具有缺省值的參數(shù)。例如:proc add val1 val2 2 val3 3 expr $val1+$val2+$val3則:add 1 /值為6add 2 20 /值為25add 4 5 6 /
39、值為15另外,TCL的過程定義還支持可變個數(shù)的參數(shù),如果過程的最后一個參數(shù)是args, 那么就表示這個過程支持可變個數(shù)的參數(shù)調(diào)用。調(diào)用時,位于args以前的參數(shù)象普通參數(shù)一樣處理,但任何附加的參數(shù)都需要在過程體中作特殊處理,過程的局部變量args將會被設(shè)置為一個列表,其元素就是所有附加的變量。如果沒有附加的變量,args就設(shè)置成一個空串,下面是一個例子:proc add val1 args set sum $val1 foreach i $args incr sum $i return $sum 則:add 2 /值為2add 2 3 4 5 6 /值為204.4 引用:upvar命令語法:upvar ?level? otherVar myVar ?otherVar myVar .?upvar命令使
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟考網(wǎng)絡(luò)管理員備考計劃試題及答案
- 人才招聘與培養(yǎng)計劃
- 結(jié)合客戶反饋優(yōu)化生產(chǎn)流程計劃
- 自然語言處理技術(shù)進展試題及答案
- 2024年沈陽工程學院輔導員考試真題
- 2025年法學概論百科全書式試題及答案
- 2024年吉林省醫(yī)療保障局下屬事業(yè)單位真題
- 2024年塔城地區(qū)中醫(yī)醫(yī)院招聘筆試真題
- 2024年紹興市柯橋區(qū)建設(shè)集團招聘筆試真題
- 2024年平安銀行樂山分行招聘筆試真題
- A04044《納稅人稅種認定表》
- 危險作業(yè)安全專題培訓
- 廠房庫房屋面墻面彩鋼板施工方案
- 甘肅省綜合醫(yī)院及部分??漆t(yī)院等級一覽表
- DB65∕T 3253-2020 建筑消防設(shè)施質(zhì)量檢測評定規(guī)程
- 中班語言《噓我們有個計劃》課件
- 水墨中國風名著《水滸傳》簡介主題PPT模板課件
- TCSCS 009-2020 鋼結(jié)構(gòu)滑移施工技術(shù)標準
- 壓力容器使用年度檢查報告(范本)
- 實行保健食品制度
- Purchase Order模板參考模板
評論
0/150
提交評論