7

TCL でのアップレベルの使用を理解するのに問題があります。Brent Welch の TCL と Tk での実用的なプログラミングを読んでいますが、理解できないアップレベルの例があります。ここにあります:

proc lassign {valueList args} {
  if {[llength $args] == 0} {
    error "wrong # args:lassign list varname ?varname...?"
  }
  if {[llength $valueList] == 0} {
    #Ensure one trip through the foreach loop
    set valueList [List {}]
  }
  uplevel 1 [list foreach $args $valueList {break}]
  return [lrange $valueList [llength $args] end]
}

誰か説明してくれませんか?本の説明は私を十分に助けません:(

4

2 に答える 2

7

このuplevelコマンドは、現在のプロシージャのスコープとは別のスコープでコマンド (または実際にはスクリプト) を実行します。特に、この場合uplevel 1は「呼び出し元で実行」を意味します。(グローバルスコープで実行することもできuplevel #0ます。uplevel 2

その行の残りの部分を説明します: listhereの使用はforeachargs変数の内容、変数の内容valueList、およびbreak(実際には必要なかった中括弧で囲みます)。これにより、 の先頭から にvalueListリストされている各変数に値が割り当てられargs、停止します。これは、呼び出し元のコンテキストで行われます。

全体として、手順lassignは 8.5 の組み込みと同じように機能します (入力リストと変数リストが空でないことを前提としています)。

于 2012-07-18T06:11:34.637 に答える