TCL 程序示例:
proc fun { x } {
puts "$$x = $x"
}
set a 10
fun $a
在上面这个打印输出的程序中,$10 = 10
但我想得到a = 10
输出。必须读取传递值的变量以及相应的值。有没有办法读取变量名。
如果您有当前支持的 Tcl 版本(8.5 或 8.6),您可以使用它info frame -1
来查找有关调用者的一些信息。其中包含各种信息,但我们可以做一个合理的近似,如下所示:
proc fun { x } {
set call [dict get [info frame -1] cmd]
puts "[lindex $call 1] = $x"
}
set a 10
fun $a
# ==> $a = 10
fun $a$a
# ==> $a$a = 1010
现在,使用lindex
there 是完全错误的;它是 Tcl 代码,而不是列表(如果您使用复杂的命令替换,您会看到不同之处)。但是,如果您只使用一个相当简单的词,它就足够了。
% set x a
a
% set a 10
10
% eval puts $x=$$x
a=10
% puts "$x = [subst $$x]"
a = 10
% puts "$x = [set $x]"
a = 10
%
如果您将变量传递给过程,那么您应该依赖upvar
.