ich bei TCL Regel variable Umfangs verwirrt bin, hier ist ein Experiment:TCL Variable Umfang: eine Variable in einem Befehl deklarierte Zugriff
if {2 > 1} {
set x 100
}
proc p1 {} {
set y 200
}
puts $x
p1
puts $y
das Skripts Laufen gibt mir:
100
can't read "y": no such variable
while executing
"puts $y"
Das verwirrte me: Der Fehler über $ y macht Sinn, weil y innerhalb von proc definiert ist, so dass es außerhalb des proc nicht zugänglich ist. Das Problem ist x, warum ist es zugänglich? Es ist in einem Nesting-Skript des "if" -Befehls definiert.
Von meinem gewohnheitsmäßigen Denken aus C++ Sicht macht es keinen Sinn. Hat TCL eine spezielle Behandlung des Befehls "proc", so dass die in seinem Verschachtelungsscript deklarierten Variablen anders behandelt werden als andere, wie "if", "for" usw.?
BTW Ich weiß, wie es funktioniert, will nur die TCL-Regeln für den variablen Bereich verstehen.
Wenn Sie das Skript Ihres p1-Befehls in einem 'uplevel' ausführen, verhält es sich genauso wie der Befehl 'if'. z.B. 'proc p1 {} {uplevel {...}}'. – Brandin