近來又得重新投入 Tcl Script 的懷抱,花了幾天重新複習了一下,手感也慢慢地回來了。透過幾天的溫習,順手做個紀錄
Variable : set / unset command
% set var 5 ;# 設定變數 var 的 vlaue 為 5 5 % puts $var ;# 列印變數 var 5 % unset var ;# 刪除變數 var % puts $var ;# 列印變數 var, 因為不存在所以出現錯誤訊息 Can't read "var": no such variable can't read "var": no such variable
Command Substitution
% set len [string length test123] ;# 將 [string length test123] 的結果設定到變數 len 7
上面範例中的 [string length test123] 稱為 nested command,透過 [ ] 做區分。nested command 可支援多階層(參考下面 expr command 範例),但考量到程式的可讀性,個人建議約 3~4 階層。
Math Expressions : expr command
% set xylist [list [list 10 20] [list 30 40]] {10 20} {30 40} % set distance [expr 100 - [lindex [lindex $xylist 0] 1]] ;#nested command example 80
另外,整數與浮點數的分別是透過"是否有加小數"來做區分,如下面犯列說明
% expr 1/3 ;# 被除數和除數皆為整數,會得到一個整數的結果 0 % expr 1/3.0 ;# 若被除數或除數之中有一個浮點數,則會得到一個浮點數的結果 0.333333333333 % expr 1.0 /3 ;# 若被除數或除數之中有一個浮點數,則會得到一個浮點數的結果 0.333333333333
若有精度(取小數點以下幾位)的需求,則可以透過 tcl_precision 這個變數來定義。請參閱下列範例
% expr 1 / 3.0 0.333333333333 % set tcl_precision 3 ;# 將精度設為小數點下三位 3 % expr 1 / 3.0 0.333 %
Backslash Substitution
Backslash, "\", 反斜線,這個符號再 tcl script 中有兩種使用方式;一種是用來顯示特殊字元,另外一種則用來分割太長的單行指令或增加程式的可讀性。
% set var 123 123 % puts "\$var = $var" $var = 123 % set mathGrade [list [list Arthur 100] \ [list Emily 99 ] \ [list Merisa 98 ] \ [list sean 80 ]] {Arthur 100} {Emily 99} {Merisa 98} {sean 80} %
Double Quotes and Brace
Double Quotes 雙引號 ( " ) 與 Brace 大括號 ( { } ) 都是用來將文字組合成字串。兩者主要的差別在於 double quotes 中間的字串是允取 command subsitution, 但 brace 中間的字串是不被允許 command subsitution. 若 { } 位於 " " 之間使用,則 { } 原本的功能將被關閉。使用者可以透過兩者的特性來完成想要達到的功能。
% set str "Hello the world!!" Hello the world!! % puts "The length of \"$str\" is [string length $str]" ;# 透過 neted command 來計算 str 字串的長度 The length of "Hello the world!!" is 17 % puts {The length of \"$str\" is [string length $str]} ;# 大括號中的所有字元都會被完整的列印出來 The length of \"$str\" is [string length $str] % puts "foo {$two} XXX" foo {2.0} XXX
Procedures : proc command
副程式,透過 proc 這個指令來定義.如下面的範例說明
proc Diag { a b } { ;# 副程式 Diag, 共有兩個輸入參數 set c [expr {sqrt($a * $a + $b * $b )}] return $c ;# 將計算完的結果回傳 } set x [ Diag 5 10 ] ;# 透過 Diag 副程式計算 5^2 + 10^2 並將結果回傳到 x 變數
留言列表