tcl
Struktury kontrolne
Szukaj…
Składnia
- jeśli wyraż1? to? body1 elseif expr2? body2 ...? jeszcze? ? bodyN?
- do rozpoczęcia testu następnego ciała
- podczas testowania ciała
- foreach varlist1 list1? varlist2 list2 ...? ciało
Uwagi
Dodanie nowej struktury kontrolnej do Tcl
W Tcl struktura kontrolna jest w zasadzie tylko kolejnym poleceniem. Jest to jedna możliwa implementacja do ... while / do ... until struktury kontroli.
proc do {body keyword expression} {
uplevel 1 $body
switch $keyword {
while {uplevel 1 [list while $expression $body]}
until {uplevel 1 [list while !($expression) $body]}
default {
return -code error "unknown keyword \"$keyword\": must be until or while"
}
}
}
Wspólne dla obu rodzajów pętli do -do jest to, że skrypt o nazwie body będzie zawsze wykonywany przynajmniej raz, więc robimy to od razu. Poziom uplevel 1 $body wywołania oznacza „wykonaj skrypt na poziomie stosu wywołującego”. W ten sposób wszystkie zmienne używane przez skrypt będą widoczne, a wszelkie uzyskane wyniki pozostaną na poziomie dzwoniącego. Następnie skrypt wybiera, na podstawie parametru keyword , czy iterować, gdy warunek jest prawdziwy, czy dopóki nie jest fałszem, co jest tym samym, co iteracja, gdy logiczna negacja warunku jest prawdziwa. Jeśli podano nieoczekiwane słowo kluczowe, pojawia się komunikat o błędzie.
if / while / for
jeśli wyraż1 ? to? body1 elseif expr2 ? body2 ...? jeszcze? ? bodyN?
exprN jest wyrażeniem, którego wynikiem jest wartość logiczna. bodyN to lista poleceń.
set i 5
if {$i < 10} {
puts {hello world}
} elseif {$i < 70} {
puts {enjoy world}
} else {
puts {goodbye world}
}
do rozpoczęcia testu następnego ciała
start , next i body są listami poleceń. test jest wyrażeniem, którego wynikiem są wartości boolowskie.
Polecenie break wyrwie się z pętli. Polecenie Kontynuuj spowoduje przejście do następnej iteracji pętli.
Częstym zastosowaniem jest:
for {set i 0} {$i < 5} {incr i} {
puts "$i: hello world"
}
Ponieważ start i next są listami poleceń, każde polecenie może być obecne.
for {set i 0; set j 5} {$i < 5} {incr i; incr j -1} {
puts "i:$i j:$j"
}
podczas testowania ciała
Test jest dowolnym wyrażeniem, którego wynikiem jest wartość logiczna. Podczas gdy test jest prawdziwy, ciało jest wykonywane.
set x 0
while {$x < 5} {
puts "hello world"
incr x
}
Polecenie break wyrwie się z pętli. Polecenie Kontynuuj spowoduje przejście do następnej iteracji pętli.
set lineCount 0
while {[gets stdin line] >= 0} {
puts "[incr lineCount]: $line"
if { $line eq "exit" } {
break
}
}
Iteracja list: foreach
foreach varlist1 list1 ? varlist2 list2 ...? ciało
foreach to potężna struktura sterowania, która pozwala na zapętlanie listy lub wielu list.
set alpha [list a b c d e f]
foreach {key} $alpha {
puts "key: $key"
}
Można podać wiele nazw zmiennych.
set alphaindexes [list a 1 b 2 c 3 d 4 e 5 f 6]
foreach {key num} $alphaindexes {
puts "key:$key num:$num"
}
Wiele list może być iterowanych jednocześnie.
set alpha [list a b c d e f]
set indexes [list 1 2 3 4 5 6]
foreach {key} $alpha {idx} $indexes {
puts "key: $key idx:$idx"
}