我想使用外部分配的变量(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
,然后您可以在过程中本地使用$a
。upvar
命令将在堆栈某处声明的变量与局部变量"链接"起来。如果变量在堆栈中声明的深度超过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
这样可以避免与其他全局变量的潜在冲突