不是特定过程运行本地的 Tcl 变量需要绑定到名称空间;命名空间可以是全局命名空间(有一个特殊的命令),但不是必须的。因此,要在两个过程之间共享一个变量,您需要给它一个公开的名称:
proc testList {{setup_file ""}} {
# Use the 'eq' operator; more efficient for string equality
if {$setup_file eq ""} {
set setup_file location
}
global setupFile
set setupFile $setup_file
}
proc run {} {
global setupFile
puts "$setupFile"
}
现在,这是为了共享一个完整的变量。如果您只想共享一个值,还有其他一些选择。例如,这两种可能性:
proc testList {{setup_file ""}} {
if {$setup_file eq ""} {
set setup_file location
}
# Create a procedure body at run-time
proc run {} [concat [list set setupFile $setup_file] \; {
puts "$setupFile"
}]
}
proc testList {{setup_file ""}} {
if {$setup_file eq ""} {
set setup_file location
}
# Set the value through combined use of aliases and a lambda term
interp alias {} run {} apply {setupFile {
puts "$setupFile"
}} $setup_file
}
Tcl 8.6 有更多选项,但仍处于测试阶段。