我对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变量的用途是什么?
最佳答案
如its manual page中所述,global
命令仅在proc主体内部具有含义:
除非在proc主体的上下文中执行,否则此命令无效。
因此,整个问题尚不清楚。如果您想在第一个文件中有一个proc设置一个全局变量,而另一个proc(在第二个文件中)则读取它,那么这个问题就很有意义,答案是肯定的,第二个文件中的代码将看到所做的更改通过第一个文件中的代码,前提是“设置”过程在“获取”过程之前运行。为了更清楚一点,全局变量对于解释器运行该变量的代码而言是全局的。因此,无论您使用哪种方式将代码提取到解释器中(package require
vs source
vs eval
等),所有这些代码都将看到同一组全局变量。
但是无论如何,您可能应该避免使用全局变量并使用命名空间变量:它们也是全局变量,但是您可以大大降低以后引入其他代码的风险,而这些代码会无意中混淆了不应接触的全局变量。当然,通常情况下,这取决于应用程序的预期复杂程度。
关于tcl - TCL中global关键字的用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7162027/