Мне нужна процедура, которая сможет получить доступ, прочитать и изменить переменную из пространства имен вызывающей стороны.Переменная называется _current_selection
.Я пытался сделать это, используя upvar
несколькими различными способами, но ничего не получалось.(Я написал небольшой тестовый процесс только для проверки механизма upvar
).Вот мои попытки:
вызов proc:
select_shape $this _current_selection
proc:
proc select_shape {main_gui var_name} {
upvar $var_name curr_sel
puts " previously changed: $curr_sel"
set curr_sel [$curr_sel + 1]
}
Для моей второй попытки:
вызов proc:
select_shape $this
proc:
proc select_shape {main_gui} {
upvar _current_selection curr_sel
puts " previously changed: $curr_sel"
set curr_sel [$curr_sel + 1]
}
Во всех попытках, когда он достигает этой области в коде, он говорит: can't read "curr_sel": no such variable
Что я делаю не так?
РЕДАКТИРОВАТЬ:
Вызов функции выполняется из команды bind
:
$this/zinc bind current <Button-1> [list select_shape $this _current_selection]
в начале я думал, что это не имеет значения.но, возможно, это так.