私がテストしているコードは次のとおりです。
proc check_eval {} {
set cmd {set return_val {}; set return_val}
puts "Command to evaluate : $cmd"
uplevel eval $cmd
}
次の問題が発生しました。「check_eval」を呼び出しているときに、ステートメント「set return_val {}」が無視されているようです。つまり、interpeter は呼び出しスコープで既存の return_val 変数を探します。例:
tcl>unset return_val
tcl>check_eval
Command to evaluate : set return_val {}; set return_val
can't read "return_val": no such variable
while evaluating check_eval
tcl>set return_val 556
556
tcl>check_eval
Command to evaluate : set return_val {}; set return_val
556
tcl>
一方、手順の「set return_val {}」をたとえば「set return_val 10000」に置き換えると、実行時に 10000 が表示されます。
tcl>set return_val 556
556
tcl>check_eval
Command to evaluate : set return_val 10000; set return_val
10000
tcl>set return_val
10000
ここで何が起こっているのか説明してくれる人はいますか?
ありがとう。