2

私がテストしているコードは次のとおりです。

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

ここで何が起こっているのか説明してくれる人はいますか?

ありがとう。

4

1 に答える 1