對於特定過程運行不是本地的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更多的選擇,但仍處於測試階段。