在TCL中使用namespace / uplevel / global

时间:2013-12-30 23:24:15

标签: namespaces tcl upvar

我有一个这样的脚本:

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

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

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

我尝试使用upvar命令,将此行添加到我的subProcs:

subProc1 { } {
    upvar $var1 var1 $var2 var2 ;#etc
    puts $var1
    # etc.
}

但我有"没有这样的变量"错误信息,并且像这样有一个巨大的行

并不好

我刚读过有关命名空间的内容,但我并不真正理解如何使用它(加上我不确定理解这个概念,它是否真的适合我的用例?)

1 个答案:

答案 0 :(得分:1)

upvar是适合的工具。其他命令可以使用upvar进行模拟。

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

upvar var1 var1 var2 var2 ;#...

我会考虑使用一些不同的方式来存储数据,可能是字典还是数组? 这样可以更容易地传递变量。