我有一个可以评估expr并在本地附加到特定列表的proc
proc a {} {
set mylist ""
set out [expr...
lappend mylist $out
}
我想在“ a” proc之外使用“ mylist”列表,而不将其声明为全局列表,或者不使用“ return mylist”从proc内部返回该列表。我该怎么做。我有两个用例,在另一个proc中使用变量:
proc b {} {
do something with the "mylist" from proc a
}
用例2:
Just use it outside the proc [Not within another proc]
答案 0 :(得分:2)
“ mylist”变量仅在执行proc a时存在。每当proc完成时,都会清除其所有局部变量。
只要正在进行a
,就可以使用upvar
命令访问其变量。
例如:如果您从b
呼叫a
,则b
可以使用以下命令访问“我的列表”:
upvar 1 mylist othervar
puts $othervar
但是,通常更好的做法是在proc之间传递变量(或至少是其名称),或者使其成为全局变量或命名空间变量。
答案 1 :(得分:0)
参考:https://www.tcl-lang.org/man/tcl/TclCmd/upvar.htm
示例代码段:
proc foo {ref_var} {
upvar $ref_var local_var
# do some operatins
lappend local_var 20
}
proc bar {} {
set a [list 10]
puts "Before: $a"
foo a
puts "After: $a"
}
# nested proc
bar
# without proc
set c [list 30]
puts "Initial: $c"
foo c
puts "Final: $c"
输出:
Before: 10
After: 10 20
Initial: 30
Final: 30 20