如何从不调用 proc 'a' 的不同 proc 'b' 访问 proc 'a' 中定义的变量?

How to access a variable defined in proc 'a' from a different proc 'b' which does not call proc 'a'?

我正在尝试执行一个 tcl 脚本,它对进程 a 和 b 进行独占调用。这两个过程彼此无关。

proc a {} {
   set var1 "a"
}

proc b {} {
   # Do something here with: $var1
}

 # script.tcl
 a
 b

我也无法访问 script.tcl。当调用 proc 'a' 时,我需要以某种方式存储 var1,以便稍后在调用它时可以在 proc 'b' 中访问它。如何在 proc b 中获取 var1 的值?我好像不能在这里使用 'global' 和 'upvar'?

一个简单的方法是通过在变量名前面加上 ::

来在全局范围内定义变量
proc a {} {
   set ::var1 "a"
}

proc b {} {
   puts $::var1
}

其他方法是在每个 proc 中使用 global 命令或在其自己的特殊命名空间中定义变量。

如果涉及命名空间,使用 variable 而不是 global 会提供更多的灵活性

namespace eval n {
    proc a {{value A}} {
        variable var1
        set var1 $value
        return
    }
    proc b {} {
        variable var1
        puts "var1 is <$var1>"
    }
}

n::a
n::b                           ;# => var1 is <A>

namespace eval n {a 42; b}     ;# => var1 is <42>

puts $::var1                   ;# => can't read "::var1": no such variable