1

'd ファイルから変数を 'upvar' する必要がありsourceます (そして、それらの名前がわかりません)

以下を含む TCL ファイルがあるとします。

set v 7

今これ:

proc p {} {
  source t.tcl
}

p

puts $v
# => can't read "v": no such variable

ファイル t.tcl は変更しないでください。

の内容についても知識がありませんt.tclenv変数として渡されたとしましょう。vトップレベルで可視化するにはどうすればよいですか?

4

1 に答える 1

3

投稿したコードについて、 の定義を次のように変更しますp

proc p {} {
    upvar 1 v v
    source t.tcl
}

または (変数を最上位レベルに明示的に接続するには:

proc p {} {
    upvar #0 v v
    source t.tcl
}

(注: シンタックス ハイライターは文字列"#0 v v"をコメントと見なしますが、そうではありません。)

のメンバーenvはグローバルであるため、その問題は発生しません。

ただし、変数の名前がわからない場合はupvar、変数が存在するとそれができないため、それほど単純ではありません。

source次のように、トップレベルでコマンドを評価することは可能ですか?

proc p {} {
    uplevel #0 source t.tcl
}

(繰り返しますが、コメントではありません。)

それともpのレベルで評価する必要がありますか?

ドキュメント: procputssetsourceuplevelupvar

envのドキュメント

(注: コメントで言及されている 'Hoodiecrow' は私です。以前にそのニックネームを使用しました。)

于 2014-07-17T22:06:27.080 に答える