我在TCL中有关于upvar命令的问题.使用upvar命令,我们在其他过程中引用了全局变量或局部变量.我看到了以下代码:
proc tamp {name1 name2} {
upvar $name1 Ronalod
upvar $name2 Dom
set $Dom "Dom"
}
Run Code Online (Sandbox Code Playgroud)
这个过程被称为tamp name1 name2,并且没有全局变量name1,name2在它之外定义,这个upvar在这种情况下是如何工作的?
谁能让我知道TCL upvar 0和upvar 1TCL 之间的区别,我们如何实时使用.但是,如果有人用例子解释,它会让我更清楚.
想从TCL专业人士那里获得最佳实践的建议.
假设您要使用proc构建包含特定数据的列表.现在哪种方式最好?
proc processList { myList } {
upvar $myList list_
#append necessary data into list_
}
proc returnList {} {
set list_ {}
#append necessary data into list_
return $list_
}
set list1 {}
processList list1
set list2 [returnList ]
Run Code Online (Sandbox Code Playgroud)
推荐哪种做法?
编辑:对不起,我无法理解回答这个问题的人的共识(和解释).
proc rep {name} {
upvar $name n
puts "nm is $n"
}
Run Code Online (Sandbox Code Playgroud)
在上面的过程中,' name'是一个传递给名为' rep' 的过程的参数.当我运行这个程序时,我得到了" error : Can't read "n" : no such variable".任何人都可以告诉我这个错误的可能原因是什么.
在我目前正在处理的TCL代码中,每个过程中的参数都被upvar赋予局部变量,然后使用.像这样的东西:
proc configure_XXXX { params_name_abc params_name_xyz} {
upvar $params_name_abc abc
upvar $params_name_xyz xyz
}
Run Code Online (Sandbox Code Playgroud)
从这里开始,abc和xyz将用于做任何事情.我阅读了upvar TCL wiki,但无法理解其优点.我的意思是为什么我们只能使用已经接收的变量作为过程中的参数.有人可以详细说明吗?