首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TCL中upvar 0和upvar 1的差异

TCL中upvar 0和upvar 1的差异
EN

Stack Overflow用户
提问于 2015-05-12 19:39:14
回答 2查看 1.5K关注 0票数 5

谁能告诉我upvar 0upvar 1在TCL中的区别,我们如何实时使用。亲切地,如果有人用例子来解释,这会让我更清楚。

EN

回答 2

Stack Overflow用户

发布于 2015-05-20 18:53:44

与upvar 1不同,upvar 0为变量创建别名。对于ex:

代码语言:javascript
复制
    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"

输出:

代码语言:javascript
复制
output is 8 7
in global frame value of a is  7
output is 11 11
in global frame value of a is  4
票数 2
EN

Stack Overflow用户

发布于 2015-05-12 19:59:16

好的,我想举个例子就能很清楚地说明其中的区别:

假设我们有一个函数test_upvar1:

代码语言:javascript
复制
proc test_upvar1 {} {
    upvar 1 a b
    incr b
}

和一个函数test_upvar0:

代码语言:javascript
复制
proc test_upvar0 {} {
    upvar 0 a b
    incr b
}

现在我们设置变量a并调用这两个函数,看看会发生什么:

代码语言:javascript
复制
set a 5
test_upvar1

这将返回6

代码语言:javascript
复制
set a 5
test_upvar0

将返回1

之所以会发生这种情况,是因为我们在同一执行帧1中选择了0和1的执行帧0链接到更高的帧。

请参阅http://wiki.tcl.tk/1508

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30189782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档