namespaces - TCL中命名空间/上级/全局的使用

标签 namespaces tcl upvar

我有一个这样的脚本:

proc subProc1 { } {
    puts $var1
}
proc subProc2 { } {
    puts $var2
}

proc mainProc { args } {
    # Define many variables
    subProc1
    subProc2
    #etc.
}

我希望 subProc1 和 subProc2 在 mainProc 中定义变量。我可以将它们作为参数传递,但这是很多参数,我想避免这种情况。

我尝试通过将这一行添加到我 subProcs 来使用 upvar 命令:
subProc1 { } {
    upvar $var1 var1 $var2 var2 ;#etc
    puts $var1
    # etc.
}

但是我有“没有这样的变量”错误消息,像这样的大行并不好

我只是阅读了命名空间,但我真的不明白如何使用它(另外我不确定这个概念,所以它真的适合我的用例吗?)

最佳答案

upvar是正确的工具。其他命令可以用 upvar 模拟.

但是你怎么称呼upvar的方式是错误的.您必须使用变量名,而不是它的值(这会抛出“没有这样的变量”错误)。

upvar var1 var1 var2 var2 ;#...

我会考虑使用一些不同的方式来存储数据,也许是字典或数组?
这将使传递变量更容易。

关于namespaces - TCL中命名空间/上级/全局的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20849276/

相关文章:

namespaces - 预期 TCL : upvar vs namespace variable performance

c++ - 定义 const 变量的最佳方式

php - 如何防止 PHP namespace 冲突(预 bundle )

c - 在 TCL 8.4 中,如果 #define NULL 0,TclLib 函数 Tcl_SetHashValue 是否允许值为 NULL?

tcl - 如何在TCL代码中查找错误

tcl - upvar 命令在 TCL 中是如何工作的?

php - 使用 eval() 和 include() 的命名空间无法按预期工作

php - 使用 PHP 中的动态命名空间前缀解析 XML 元素

lua - TCL vs Lua - 编写 mmo 服务器脚本