tcl
文档提供了有关如何使用该upvar
命令的以下示例:
proc add2 name {
upvar $name x
set x [expr {$x + 2}]
}
在此过程中,充当x
对name
属于.add2
我不明白为什么要为第一个参数upvar
提供美元符号,而第二个参数不是。它不应该只是upvar name x
,因为我们是在引用name
而不是它的价值吗?
下面是如何使用 add2 的示例:
(Tcl) 2 % set fred 3
3
(Tcl) 3 % add2 fred
5
此处调用 add2 时将其名为“name”的参数设置为值“fred”。如果代码这样做upvar name x
了,它将对字面上称为“name”的变量进行操作,但我们需要它对名为“fred”的变量进行操作,因此我们编写$name
以从名为“name”的参数中获取值“fred”。
多纳尔的回答可以这样说明:
proc addfred {} {
upvar fred fr
incr fr 2
}
% set fred 3
3
% addfred
5
proc addfred {} {
upvar "fred" fr
incr fr 2
}
% addfred
7
即,您根本不需要在proc 的参数中使用upvar-ed 变量来使其工作。
使用 upvar 的“级别”选项,您可以为此添加更多资源。