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 вы можете добавить к этому еще больше изобретательности.

Другие вопросы по тегам