在TCL的进程中使用脚本中分配的变量



我想使用外部分配的变量(proc)在proc内部使用。例如,我尝试了以下内容

set a 10
proc myproc { } {
puts $a
}
myproc

我期望上面的脚本打印10。但是上面的脚本出错了"can't read "a: no such variable"

我不能将$a作为参数传递给脚本,因为我有很多这样的变量,我想在我的脚本内的进程中使用。你能帮我解决这个问题吗?

感谢您的帮助

如果变量在与调用myproc相同的堆栈级别声明,那么您可以在流程中执行以下操作:

upvar a a

:

set a 10
proc myproc { } {
    upvar a a
    puts $a
}
myproc

,然后您可以在过程中本地使用$aupvar命令将在堆栈某处声明的变量与局部变量"链接"起来。如果变量在堆栈中声明的深度超过1层,那么您需要将"2"传递给upvar,以便它知道在哪里查找变量:

upvar 2 a a

如果不传递"2"(或其他值),upvar假定默认查找深度为1。

您可以在该命令的Tcl文档中阅读有关upvar的更多详细信息。

如果变量a始终是一个全局变量(在脚本顶层声明),那么您可以使用:

global a

,而不是upvar

如果你有名称空间,你总是可以在那里分配它:

namespace eval blah { 
    variable a 10 
}
proc blah::myproc { } {
    variable a
    puts $a
}
blah::myproc

这样可以避免与其他全局变量的潜在冲突

最新更新