我想在proc中使用在(proc)之外分配的变量。例如,我尝试了以下内容
set a 10
proc myproc { } {
puts $a
}
myproc
我期待上面的脚本打印10。但是上面的脚本错误地出现了"无法读取" a":没有这样的变量"
我不能将$ a作为参数传递给脚本,因为我有很多这样的变量,我想在我的脚本里面的proc中使用。你能帮我解决这个问题吗?
感谢您的帮助
答案 0 :(得分:2)
如果变量声明与调用myproc
的堆栈级别相同,那么您可以在proc中执行以下操作:
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
。
答案 1 :(得分:0)
如果你有命名空间,你总是可以在那里分配:
select *
from websites
where Category not in (1, 2, 3, 4, 5)
order by Popularity desc
limit 0,3;
这样可以避免与其他全局变量的潜在冲突