3
proc rep {name} {
    upvar $name n 
    puts "nm is $n"
}

上記のプロシージャで、' name' は、' ' という名前のプロシージャに渡されるパラメータrepです。このプログラムを実行すると、" error : Can't read "n" : no such variable" が得られました。このエラーの考えられる原因を教えてください。

4

2 に答える 2

5

渡した名前の変数がrep呼び出しスコープに存在しない場合、このエラー メッセージが生成されます。たとえば、この対話型セッションを tclsh で確認してください…</p>

% proc rep {name} {
    upvar $name n
    puts "nm は $n"
}
% 担当者 foo
「n」を読み取れません: そのような変数はありません
% セット foo x
バツ
% 担当者 foo
nm は x

さらに深く…</h2>

変数が設定されていない場合、変数fooはおかしな状態になります。upvarそれは実際には存在します (変数のグローバル名前空間のハッシュ テーブルで参照されます) が、内容がないため、存在するかどうかのテストは失敗します。(変数は、どこかにエントリ (つまり、その内容を格納するためのストレージ) があり、そのストレージに値が設定されている場合に存在すると言われます。設定されていない変数は、NULLその中に C レベルでNULLこのため、Tcl 言語自体は値をまったくサポートしていません。値は存在しないことに相当します。)

于 2013-02-08T08:56:48.570 に答える