proc rep {name} {
upvar $name n
puts "nm is $n"
}
上記のプロシージャで、' name' は、' ' という名前のプロシージャに渡されるパラメータrepです。このプログラムを実行すると、" error : Can't read "n" : no such variable" が得られました。このエラーの考えられる原因を教えてください。
渡した名前の変数がrep呼び出しスコープに存在しない場合、このエラー メッセージが生成されます。たとえば、この対話型セッションを tclsh で確認してください…</p>
% proc rep {name} {
upvar $name n
puts "nm は $n"
}
% 担当者 foo
「n」を読み取れません: そのような変数はありません
% セット foo x
バツ
% 担当者 foo
nm は x
変数が設定されていない場合、変数fooはおかしな状態になります。upvarそれは実際には存在します (変数のグローバル名前空間のハッシュ テーブルで参照されます) が、内容がないため、存在するかどうかのテストは失敗します。(変数は、どこかにエントリ (つまり、その内容を格納するためのストレージ) があり、そのストレージに値が設定されている場合に存在すると言われます。設定されていない変数は、NULLその中に C レベルでNULLこのため、Tcl 言語自体は値をまったくサポートしていません。値は存在しないことに相当します。)