NS2入門學習(三)之Tcl知識點
阿新 • • 發佈:2018-11-07
1、基本命令格式換(如下總結一些易錯的知識點)
“#”:註釋
";"或者"換行"作為語句的結束
2、變數
變數不需要事先宣告;
在使用變數時要在變數名前加$,如$var;
set var 3,set命令用來給變數賦值;
unset var,unset命令用來刪除變數;
3,組合和替代
替代
變數替代:如前面的變數賦值
命令替代:這種形式的替代使用方括號"[]"來實現:
注意set a 3; set len [expr $a*2]; 輸出結果是6,tcl中變數只有字串一種,
所以通過$a的值應該是字串'3',在expr中轉換成數值3並進行計算。
反斜槓替代:和c語言類似,與特殊含義字元組合就表示這個字元本身,如“\$” "\{" “\}” "\[" "\]" "\\"來表示這些符號本身$ {} [] \.不再具有特殊含義。
表示續行;和C類似,換頁換行等替代。
組合
通過雙引號或者{}使兩個字串組合成一個字串。
替代與組合的順序
從左到右遍歷引數,組合的決定是在替代前做出的
示例:set a 3; set b 5;
puts"$a+$b=[set a [expr $a+$b]]"
=>3+5=8 #首先進行組合,掃描到$a+$b=,得到3+5=,然後替換[]內的,得到值8,且此時a=8;
puts"[set a [expr $a+$b]]=$a+$b"
=>13=13+5 #[]是實現了命令替代,上面已經得到a=8,所以前面是a又被賦值13,後面a也是13了
4、數學運算
運算子與C基本類似5、流程控制
if語句: 後面的表示式是使用{},if{$a==0}{命令體}; switch語句 : 則通過指定是-exact,-glob,-regexp來完成匹配; while語句: 後面表示式和命令體也是使用{}; foreach語句:foreach Var {valuelist} {body},從資料列表中依次取出數值來賦給變數Var,然後執行一次命令體body, valuelist是用花括號括起來的多個值的組合; for迴圈語句: for{set I 1} {$I<11}{ incr 1 } {body}#單獨的{}來處理3個部分,同c類似; break與continue命令:與C類似; catch命令:catch { 命令體} result,result用來儲存命令結果或者出錯資訊,如果無錯誤,返回0給result,若有錯則為非0;6、過程:
自定義過程:proc name {params} {body} #就是定義函式,name為函式名,後面是引數,body是函式體,呼叫時直接 name var1 var2..; rename命令:可以改變一個命令的名稱 作用域:proc內為區域性變數,之外的為全域性變數,與C類似,但是在proc內使用全域性變數時需要前面加上 global關鍵字。 遞迴呼叫過程:在proc內呼叫自己,但要有遞迴結束條件,與C類似7、陣列
定義陣列:不用事先定義一個集合,而是直接每次用set定義出陣列中的一個元素來。下標可以不是數字,可以是任意字元。unset 陣列名 刪除陣列。 array命令:array 處理陣列的命令體,例如array exists arr#判斷是否存在陣列,如果存在返回1,否則返回0. 示例: set ll [list 0 aa 1 b 2 cc]#構建列表 array set arr $ll #從列表來構建陣列,結果為arr(0)=aa,arr(1)=bb,arr(2)=cc set arr(0) =>aa array get arr =>0 aa 1 bb 2 cc foreach index [array names arr] {puts stdout $arr($index) } =>aa bb cc while{[array anymore arr $id]}#如果陣列還有剩餘元素 { set index[array nextelement arr $id] #獲得下一個元素的索引 puts"\$arr($index)=$arr($index)"#列印陣列元素的值 } =>$arr(0)=aa $arr(1)=bb$arr(2)=cc