在TCL中使用全局关键字

时间:2011-08-23 13:49:18

标签: tcl global

我对TCL中的global有疑问。 在一个tcl文件tclone.tcl中,我有一个全局变量:global SIGNAL

在另一个名为tcltwo.tcl的tcl文件中,我将变量SIGNAL设置为:set SIGNAL 10

在tclone.tcl中,我将tcltwo.tcl归为“package require tcltwo.tcl 当我执行它时,tclone.tcl中的变量SIGNAL是否会被设置为10?和gloable变量的用法是什么?

1 个答案:

答案 0 :(得分:3)

its manual page中所述,global命令仅在proc主体内有意义:

  

除非在proc主体的上下文中执行,否则此命令无效。

所以整个问题都不清楚。如果你的意思是你在第一个文件中有一个proc设置一个全局变量而另一个proc(在第二个文件中)读取它,那么问题是有道理的,答案是肯定的,第二个文件中的代码将看到所做的更改通过第一个文件中的代码,“设置”程序在“获取”之前运行。为了使其更清楚,全局变量对于解释器运行该变量运行的代码是全局的。因此,无论您使用哪种方式将代码提取到解释器(package require vs source vs eval等),所有代码都将看到同一组全局变量。

但是在任何情况下你都应该避免使用全局变量并使用命名空间变量:它们也是全局变量但你会大大降低以后引入其他代码的风险,这些代码会无意中弄乱它不应该触及的全局变量。当然,通常这取决于您的应用程序的复杂程度。