我对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变量的用法是什么?
答案 0 :(得分:3)
如its manual page中所述,global
命令仅在proc主体内有意义:
除非在proc主体的上下文中执行,否则此命令无效。
所以整个问题都不清楚。如果你的意思是你在第一个文件中有一个proc设置一个全局变量而另一个proc(在第二个文件中)读取它,那么问题是有道理的,答案是肯定的,第二个文件中的代码将看到所做的更改通过第一个文件中的代码,“设置”程序在“获取”之前运行。为了使其更清楚,全局变量对于解释器运行该变量运行的代码是全局的。因此,无论您使用哪种方式将代码提取到解释器(package require
vs source
vs eval
等),所有代码都将看到同一组全局变量。
但是在任何情况下你都应该避免使用全局变量并使用命名空间变量:它们也是全局变量但你会大大降低以后引入其他代码的风险,这些代码会无意中弄乱它不应该触及的全局变量。当然,通常这取决于您的应用程序的复杂程度。