サーチ…


構文

  • expr1ならば? body1 elseif expr2?それから? body2 ...?else? ?bodyN?
  • 次のテストを開始するためのボディ
  • 試験体
  • foreach varlist1 list1?varlist2 list2 ...?体

備考

ドキュメント: breakforforeachifswitchuplevelwhile

Tclに新しいコントロール構造を追加する

Tclでは、制御構造は基本的に別のコマンドです。これはdo ... until制御構造do ... until do ... while / do ... until実装の1つです。

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

両方の種類のdo -loopsに共通するのは、 bodyという名前のスクリプトは常に少なくとも1回は実行されるため、すぐにその処理を行うということです。起動レベルuplevel 1 $bodyは、 "呼び出し元のスタックレベルでスクリプトを実行する"ことを意味します。このようにして、スクリプトで使用されるすべての変数が表示され、生成された結果は呼び出し元のレベルにとどまります。スクリプトは、 keywordパラメータに基づいて、条件が真である間、または条件の論理否定が真である間に反復するのと同じである偽になるまで反復するかどうかを選択する。予期しないキーワードが指定された場合、エラーメッセージが生成されます。

if / while / for

expr1の 場合 ?その後? body1 elseif expr2 ?それから? body2 ...?else? ?bodyN?

exprNはブール値に評価される式です。 bodyNはコマンドのリストです。

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

次のテスト 開始するためのボディ

startnextbodyはコマンドのリストです。 testはブール値に評価される式です。

breakコマンドはループから抜け出します。 continueコマンドは、ループの次の繰り返しにスキップします。

一般的な使用方法は次のとおりです。

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

startnextはコマンドのリストなので、どのコマンドも存在する可能性があります。

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

しばらく 試験体

テストは、ブール値に評価される任意の式です。 テストが真の間、 ボディが実行されます。

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

breakコマンドはループから抜け出します。 continueコマンドは、ループの次の繰り返しにスキップします。

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

リストの繰り返し:foreach

foreach varlist1 list1varlist2 LIST2 ...?

foreachは、リストまたは複数のリストをループする強力な制御構造です。

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

複数の変数名を指定することができます。

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

同時に複数のリストを反復することができます。

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
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow