TCL 程序控制

for
for start test next body
for是一個與C語言中for結構類似的循環命令。start、next和body必須是Tcl命令字符串,test是表達式字符串。for命令首先調用Tcl解釋器來執行start進行一些初始化操作。然後將test做爲表達式進行評估。如果評估結果非零,則調用Tcl解釋器執行body,然後調用解釋器執行next,然後重複以上步驟,直到test表達式評估結果爲零。如果在body中調用了continue命令,則跳過當前body中continue後面的命令,進入下一次循環。如果在body中調動了break命令,則終止for循環命令。for循環命令返回一個空字符串。

for {set x 0} {$x<5} {incr x} {
    puts $x;
}
 for循環中的test表達式必須要用大括號包圍起來,否則會在for循環之前首先進行變量替換,這會導致test表達式無法感知到變量的變更,從而導致循環不執行或者無限循環。當test表達式被大括號包圍起來,會使變量替換延遲到表達式求值時,從而能偶感知變量的變更。具體是無限循環還是循環不執行,取決於變量替換後表達式的值。如果值爲非零則會無限循環,否則循環不執行。

foreach
foreach varName list body
foreach varlist1 list1 ?varlist2 list2 ...? body
foreach循環命令可以循環一個或多個列表中的值。在循環時,list中的元素會像使用lindex命令一樣從前到後依次分配給varName,然後調用Tcl解釋器執行body中的命令。

set values {a b c d e f g h}
foreach value $values {
    puts $value
}
 foreach還可以同時循環多個列表。每個列表都有一個與之對應的循環變量。在每次迭代時都會將list中的值分配給對應的varlist。list中的每個值會按順序使用一次。最大迭代次數爲list的最大元素數,從而保證list中的值一地你給會被迭代一次。如果列表中的值已經分配完畢,但是循環未結束,則使用空字符串填充對應的循環變量。

set values {a b c d e f g h}
set numbers {1 2 3 4 5}
foreach number $numbers value $values {
    puts "number:$number->value:$value"
}
 list中的值每次可以迭代多個,只需要將varName指定爲一個變量列表。每次迭代時會從list中取出列表中變量數量個值,依次分配給變量列表中的變量。當list中元素數量不足時會用空字符串填充變量。

set numbers {1 2 3 4 5}
set values {a b c d e f g h}
foreach {i j k} $values {
    puts "$i--$j--$k"
}
foreach number $numbers {i j} $values {
    puts "$number--$i--$j"
}
while
while test body
while命令首先計算test表達式的值,如果爲true,則調用Tcl解釋器執行body中的命令。執行完body中命令後,會再次計算test表達式,重複以上步驟直到test表達式爲false爲止。如果在body中調用了continue命令,則跳過當前body中continue後面的命令,進入下一次循環。如果在body中調動了break命令,則終止while循環命令。while循環命令返回一個空字符串。

set x 0
while {$x<5} {
    puts $x;
    incr x;
}
與for命令一樣,test表達式必須用大括號包圍起來。否則while循環會不執行或者無限循環。

break
通常用於循環結構for、foreach、while中提前終止break所在循環。

set x 0
while {$x<5} {
    if {$x<3} {
        puts $x;
    } else {
        break;
    }
    incr x;
}
continue
通常用於循環結構for、foreach、while中提前結束本輪循環。

set x 0
while {$x<5} {
    if {$x==3} {
        incr x;
        continue;
    }
    puts $x;
    incr x;
}

————————————————
版權聲明:本文爲CSDN博主「_榮耀之路_」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/asty9000/article/details/90603692

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章