谁能告诉我upvar 0和upvar 1在TCL中的区别,我们如何实时使用。亲切地,如果有人用例子来解释,这会让我更清楚。
发布于 2015-05-20 18:53:44
与upvar 1不同,upvar 0为变量创建别名。对于ex:
set a 4
proc upvar1 {a} {
upvar 1 a b
incr a 4
incr b 3
puts "output is $a $b"
}
proc upvar0 {a} {
upvar 0 a b
incr a 4
incr b 3
puts "output is $a $b"
}
upvar1 $a
puts "in global frame value of a is $a"
set a 4
upvar0 $a
puts "in global frame value of a is $a"输出:
output is 8 7
in global frame value of a is 7
output is 11 11
in global frame value of a is 4发布于 2015-05-12 19:59:16
好的,我想举个例子就能很清楚地说明其中的区别:
假设我们有一个函数test_upvar1:
proc test_upvar1 {} {
upvar 1 a b
incr b
}和一个函数test_upvar0:
proc test_upvar0 {} {
upvar 0 a b
incr b
}现在我们设置变量a并调用这两个函数,看看会发生什么:
set a 5
test_upvar1这将返回6
set a 5
test_upvar0将返回1
之所以会发生这种情况,是因为我们在同一执行帧1中选择了0和1的执行帧0链接到更高的帧。
请参阅http://wiki.tcl.tk/1508
https://stackoverflow.com/questions/30189782
复制相似问题