在 tcl 中使用全局变量还是命名空间变量更好?

Is it better to use a global variable or a namespace variable in tcl?

我正在处理一个 Tcl-Tk 项目并且有一些命名空间。但是主要部分(影响整个程序的主要 window 和设置)目前在全局命名空间中。我现在想知道全局命名空间中变量的最佳方式是什么:

proc TestVariable {} {
    global MyVar
    variable MyVar
    ...
}

TestVariable 在全局命名空间中时,两种变体将获得相同的结果。我对么?如果是这种情况,哪种变体更适合使用?

你应该限制自己使用大量的全局变量。使用命名空间来定义变量总是一个好主意。

查看“http://tcl.tk/man/tcl8.5/tutorial/Tcl13.html". This will provide you some insight and also check "http://tcl.tk/man/tcl8.5/tutorial/Tcl31.html”了解更多详情

全局变量是全局命名空间中的命名空间变量。全局命名空间有点特殊,因为它是其他命名空间中默认出现的地方;这就是您想要的命令(以及您 REALLY 不想要的变量,这就是为什么您应该使用 variable命令)。

一般来说,最好为属于整个应用程序的事物保留全局命名空间,并将适用性更受限制的任何事物放在其他命名空间中。如果您正在编写库代码,绝对 将它放在命名空间中(通常与库包同名)。这样可以避免很多混乱。