如何在另一个proc中引用一个proc中的变量

时间:2019-01-06 07:40:12

标签: tcl

我有一个可以评估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]

2 个答案:

答案 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