Suche…


Syntax

  • wenn Ausdruck1? body1 elseif expr2? dann? body2 ... sonst noch? bodyN?
  • für den nächsten Test testen
  • während des Testkörpers
  • foreach varlist1 list1? varlist2 list2 ...? Karosserie

Bemerkungen

Dokumentation: Pause , für , foreach , wenn , Schalter , uplevel , während

Hinzufügen einer neuen Kontrollstruktur zu Tcl

In Tcl ist eine Kontrollstruktur im Grunde nur ein weiterer Befehl. Dies ist eine mögliche Implementierung eines do ... while / do ... until Kontrollstruktur.

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"
        }
    }
}

Für beide Arten von do loops ist es üblich, dass das Skript body immer mindestens einmal ausgeführt wird, also machen wir das sofort. Der Aufruf uplevel 1 $body bedeutet "Skript auf Stackebene des Aufrufers ausführen". Auf diese Weise sind alle vom Skript verwendeten Variablen sichtbar und die erzeugten Ergebnisse bleiben auf der Ebene des Aufrufers. Das Skript wählt dann basierend auf dem keyword , ob eine Iteration durchgeführt werden soll, während eine Bedingung wahr ist oder bis sie falsch ist. Dies entspricht der Iteration, während die logische Negation der Bedingung wahr ist. Wenn ein unerwartetes Schlüsselwort angegeben wird, wird eine Fehlernachricht ausgegeben.

wenn / während / für

wenn Ausdruck1 ? body1 elseif expr2 ? dann? body2 ... sonst noch? bodyN?

exprN ist ein Ausdruck, der einen booleschen Wert ergibt. bodyN ist eine Liste von Befehlen.

set i 5
if {$i < 10} {
  puts {hello world}
} elseif {$i < 70} {
  puts {enjoy world}
} else {
  puts {goodbye world}
}

für den nächsten Test testen

start , next und body sind Befehlslisten. test ist ein Ausdruck, der boolesche Werte ergibt.

Der Break - Befehl aus der Schleife brechen. Der continue- Befehl springt zur nächsten Iteration der Schleife.

Die übliche Verwendung ist:

for {set i 0} {$i < 5} {incr i} {
  puts "$i: hello world"
}

Da start und next Befehlslisten sind, kann jeder Befehl vorhanden sein.

for {set i 0; set j 5} {$i < 5} {incr i; incr j -1} {
  puts "i:$i j:$j"
}

während des Testkörpers

Der Test ist ein Ausdruck, der einen booleschen Wert ergibt. Während test wahr ist, wird body ausgeführt.

set x 0
while {$x < 5} {
  puts "hello world"
  incr x
}

Der Break - Befehl aus der Schleife brechen. Der continue- Befehl springt zur nächsten Iteration der Schleife.

set lineCount 0
while {[gets stdin line] >= 0} {
  puts "[incr lineCount]: $line"
  if { $line eq "exit" } {
    break
  }  
}

Iteration auflisten: foreach

foreach varlist1 list1 ? varlist2 list2 ...? Karosserie

foreach ist eine leistungsfähige Kontrollstruktur, die das Durchlaufen einer Liste oder mehrerer Listen ermöglicht.

set alpha [list a b c d e f]
foreach {key} $alpha {
   puts "key: $key"
}

Es können mehrere Variablennamen angegeben werden.

set alphaindexes [list a 1 b 2 c 3 d 4 e 5 f 6]
foreach {key num} $alphaindexes {
   puts "key:$key num:$num"
}

Mehrere Listen können gleichzeitig durchlaufen werden.

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"
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow