Zoeken…


Syntaxis

  • als expr1? dan? body1 elseif expr2? dan? body2 ...? anders? ? Bodyn?
  • voor start test volgende instantie
  • terwijl test lichaam
  • foreach varlist1 list1? varlist2 list2 ...? lichaam

Opmerkingen

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

Een nieuwe besturingsstructuur toevoegen aan Tcl

In Tcl is een besturingsstructuur in feite gewoon een ander commando. Dit is een mogelijke implementatie van een do ... while / do ... until controlestructuur.

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

Gemeenschappelijk voor beide soorten do -loops is dat het script met de naam body altijd minstens één keer wordt uitgevoerd, dus dat doen we meteen. De aanroep van uplevel 1 $body betekent "script uitvoeren op stapelniveau van de beller". Op deze manier zijn alle variabelen die door het script worden gebruikt zichtbaar en blijven alle geproduceerde resultaten op het niveau van de beller. Het script selecteert vervolgens, op basis van de parameter keyword , of het moet worden herhaald terwijl een voorwaarde waar is of totdat deze onwaar is, wat hetzelfde is als itereren terwijl de logische ontkenning van de voorwaarde waar is. Als een onverwacht trefwoord wordt gegeven, wordt er een foutmelding weergegeven.

als / terwijl / voor

als expr1 ? body1 elseif expr2? dan? body2 ...? anders? ? Bodyn?

exprN is een uitdrukking die resulteert in een booleaanse waarde. bodyN is een lijst met opdrachten.

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

voor start test volgende instantie

start , next en body zijn lijsten met opdrachten. test is een uitdrukking die resulteert in een Booleaanse waarde.

Het breekcommando breekt uit de lus. De blijven commando zal doorgaan naar de volgende iteratie van de lus.

Het gemeenschappelijke gebruik is:

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

Aangezien start en volgende lijsten met opdrachten zijn, kan elke opdracht aanwezig zijn.

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

terwijl test lichaam

De test is een expressie die resulteert in een booleaanse waarde. Hoewel de test waar is, wordt het lichaam uitgevoerd.

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

Het breekcommando breekt uit de lus. De blijven commando zal doorgaan naar de volgende iteratie van de lus.

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

Lijst iteratie: foreach

foreach varlist1 list1? varlist2 list2 ...? lichaam

foreach is een krachtige besturingsstructuur waarmee u een lijst of meerdere lijsten kunt doorlopen.

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

Er kunnen meerdere variabelenamen worden opgegeven.

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

Meerdere lijsten kunnen tegelijkertijd worden herhaald.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow