Tcl: Почему в первом аргументе `upvar` используется знак доллара?
The
tcl
документы предоставляют следующий пример использования команды:
proc add2 name {
upvar $name x
set x [expr {$x + 2}]
}
Внутри этой процедуры
x
действует как ссылка на переменную, которая принадлежит области
внеadd2
.
Я не понимаю, почему первый аргумент
upvar
должен быть снабжен знаком доллара, а второй аргумент - нет. Разве это не должно быть просто
upvar name x
, так как мы ссылаемся
name
а не его стоимость?
2 ответа
Вот пример того, как можно использовать add2:
(Tcl) 2 % set fred 3
3
(Tcl) 3 % add2 fred
5
Здесь add2 вызывается с параметром «name», установленным на значение «fred». Если код то сделал
upvar name x
он будет работать с переменной, буквально называемой «имя», но нам нужно, чтобы она работала с переменной с именем «фред», поэтому мы пишем
$name
чтобы получить значение «fred» из параметра с именем «name».
Ответ Донала можно проиллюстрировать следующим образом:
proc addfred {} {
upvar fred fr
incr fr 2
}
% set fred 3
3
% addfred
5
proc addfred {} {
upvar "fred" fr
incr fr 2
}
% addfred
7
Т.е. вам вообще не нужно иметь переменную upvar-ed в параметрах прока, чтобы он работал.
С опцией «level» в upvar вы можете добавить к этому еще больше изобретательности.