TCL全局变量与双冒号变量

您所在的位置:网站首页 format冒号前 TCL全局变量与双冒号变量

TCL全局变量与双冒号变量

2023-11-10 02:03| 来源: 网络整理| 查看: 265

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

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

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

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,我得到了这个:

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,但这些数字不会说谎。)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3