如何从不调用 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
我正在尝试执行一个 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