首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TCL全局变量与双冒号变量

TCL全局变量与双冒号变量
EN

Stack Overflow用户
提问于 2019-05-16 06:03:44
回答 1查看 0关注 0票数 0

在TCL中代码有什么区别:

代码语言:javascript
运行
复制
global MyVar
set MyVar 5

和代码

代码语言:javascript
运行
复制
set ::MyVar 5 

?据我所知:: MyVar意味着MyVar将是一个全局变量。那么区别是什么呢?

EN

Stack Overflow用户

发布于 2019-05-16 15:57:30

如果这是在一个过程中,那么设置的变量或放入的值中没有功能差异。(global在过程之外没有任何影响,以及使用局部变量表的其他东西,例如lambdas和方法。)

实际差异在于具体如何完成。特别是,global设置一次以便将来的非限定变量访问很快,而使用限定形式总是进行完全查找(可能涉及多个哈希表访问)。效果是这样的,即使用完全限定的形式单次读取或写入更快,如果完成多次访问总是更快global(并且在global调用中多个变量的效果变得更强一些,因为一些成本是可以分摊的)。

但是不要相信我的话。制作一些示例程序并自己测试time,也许是这样的:

代码语言:javascript
运行
复制
proc write1 {} {
    global MyVar
    set MyVar 5
    return
}
proc write2 {} {
    global MyVar
    set MyVar 5
    set MyVar 5
    return
}
proc write3 {} {
    global MyVar MyOtherVar
    set MyVar 5
    set MyOtherVar 5
    return
}
proc write4 {} {
    global MyVar MyOtherVar
    set MyVar 5
    set MyOtherVar 5
    set MyVar 5
    set MyOtherVar 5
    return
}
proc write5 {} {
    set ::MyVar 5
    return
}
proc write6 {} {
    set ::MyVar 5
    set ::MyVar 5
    return
}
proc write7 {} {
    set ::MyVar 5
    set ::MyOtherVar 5
    return
}
proc write8 {} {
    set ::MyVar 5
    set ::MyOtherVar 5
    set ::MyVar 5
    set ::MyOtherVar 5
    return
}

foreach cmd {write1 write2 write3 write4 write5 write6 write7 write8} {
    # Execute once to ensure everything is internally optimised
    $cmd
    # Now the timing run
    puts "$cmd : [time { $cmd } 100000]"
}

在我的笔记本电脑上(现在已经有几年了)运行Tcl 8.6.9,我得到了这个:

代码语言:javascript
运行
复制
write1:每次迭代0.62610808微秒
write2:每次迭代0.63969525微秒
write3:每次迭代0.73437284微秒
write4:每次迭代0.7519245699999999微秒
write5:每次迭代0.62230006微秒
write6:每次迭代0.8437912799999999微秒
write7:每次迭代0.8246234299999999微秒
write8:每次迭代1.2297289900000001微秒

正如您所看到的(并在您自己的硬件上确认自己),write1速度慢于write5,但对于其他每对,使用global是性能获胜。(我对write3节拍感到有些惊讶write7,但这些数字不会说谎。)

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

https://stackoverflow.com/questions/-100006738

复制
相关文章

相似问题

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