使用TCL中proc内脚本中的变量

时间:2015-05-22 07:32:49

标签: tcl proc

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

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

我期待上面的脚本打印10。但是上面的脚本错误地出现了"无法读取" a":没有这样的变量"

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

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

select *
from websites
where Category not in (1, 2, 3, 4, 5)
order by Popularity desc
limit 0,3;

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