0

tcl 文档提供了有关如何使用该upvar命令的以下示例:

proc add2 name {
    upvar $name x
    set x [expr {$x + 2}]
}

此过程中,充当xname属于.add2

我不明白为什么要为第一个参数upvar提供美元符号,而第二个参数不是。它不应该只是upvar name x,因为我们是在引用name而不是它的价值吗?

4

2 回答 2

3

下面是如何使用 add2 的示例:

(Tcl) 2 % set fred 3
3
(Tcl) 3 % add2 fred
5

此处调用 add2 时将其名为“name”的参数设置为值“fred”。如果代码这样做upvar name x了,它将对字面上称为“name”的变量进行操作,但我们需要它对名为“fred”的变量进行操作,因此我们编写$name以从名为“name”的参数中获取值“fred”。

于 2022-02-26T09:59:14.763 回答
1

多纳尔的回答可以这样说明:

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 的“级别”选项,您可以为此添加更多资源。

于 2022-02-27T03:36:32.517 回答