Ricerca…


Sintassi

  • se expr1? allora? body1 elseif expr2? then? body2 ...? altro? ? BodyN?
  • per testare il prossimo corpo
  • mentre il corpo del test
  • foreach varlist1 list1? varlist2 list2 ...? corpo

Osservazioni

Documentazione: break , for , foreach , if , switch , uplevel , while

Aggiunta di una nuova struttura di controllo a Tcl

In Tcl, una struttura di controllo è fondamentalmente solo un altro comando. Questa è una possibile implementazione di un do ... while / do ... until struttura di controllo.

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

Comune per entrambi i tipi di do loops è che lo script denominato body verrà sempre eseguito almeno una volta, quindi lo facciamo subito. Il uplevel 1 $body invocazione significa "esegui lo script a livello di stack del chiamante". In questo modo, tutte le variabili utilizzate dallo script saranno visibili e tutti i risultati prodotti rimarranno al livello del chiamante. Lo script quindi seleziona, in base al parametro della keyword , se iterare mentre una condizione è vera o finché non è falsa, che è la stessa cosa dell'iterazione mentre la negazione logica della condizione è vera. Se viene fornita una parola chiave imprevista, viene generato un messaggio di errore.

se / mentre / per

se expr1 ? allora? body1 elseif expr2 ? then? body2 ...? altro? ? bodyN?

exprN è un'espressione che valuta un valore booleano. bodyN è una lista di comandi.

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

per testare il prossimo corpo

start , next e body sono liste di comandi. test è un'espressione che valuta valori booleani.

Il comando break romperà fuori dal giro. Il comando continue salterà la prossima iterazione del ciclo.

L'uso comune è:

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

Poiché start e next sono elenchi di comandi, può essere presente qualsiasi comando.

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

mentre il corpo del test

Il test è qualsiasi espressione che valuti un valore booleano. Mentre il test è vero, il corpo viene eseguito.

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

Il comando break romperà fuori dal giro. Il comando continue salterà la prossima iterazione del ciclo.

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

Elenco iterazione: foreach

foreach varlist1 lista1? varlist2 list2 ...? corpo

foreach è una potente struttura di controllo che consente il loop su un elenco o più elenchi.

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

Possono essere specificati più nomi di variabili.

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

Più elenchi possono essere ripetuti allo stesso tempo.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow