我需要一个能够从调用者的命名空间访问、读取和更改变量的过程。该变量称为_current_selection
。我尝试以upvar
几种不同的方式使用它,但没有任何效果。(我写了一个小的测试过程只是为了测试upvar
机制)。这是我的尝试:
调用过程:
select_shape $this _current_selection
过程:
proc select_shape {main_gui var_name} {
upvar $var_name curr_sel
puts " previously changed: $curr_sel"
set curr_sel [$curr_sel + 1]
}
对于我的第二次尝试:
调用过程:
select_shape $this
过程:
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]
一开始我以为没关系。但也许确实如此。