更改名称的变量的全局声明
问题描述:
我已经根据设备的端口号创建了变量。我怎样才能将它们声明为全局的,以便我可以在不同的函数中使用它们?更改名称的变量的全局声明
set txresults_$portIndex [stc::get $generator1 \
-children-GeneratorPortresults]
set rxresults_$portIndex [stc::get $Analyzer1 \
-children-AnalyzerPortresults]
答
的global
命令可以在任何地方在过程放,不只是在它的顶部。
proc yourprocedure {...} {
set portIndex [something here]
# ...
global txresults_$portIndex rxresults_$portIndex
set txresults_$portIndex [stc::get $generator1 \
-children-GeneratorPortresults]
set rxresults_$portIndex [stc::get $Analyzer1 \
-children-AnalyzerPortresults]
# ...
}
但是...
这可能是一个坏主意,要做到这一点,与可变命名变量的工作是有点讨厌(你可以用[set …]
,而不是$…
做到这一点,或者通过使用别名upvar
,但它仍然很烦人)。相反,你应该使用数组来代替,因为这使代码更容易理解:
proc yourprocedure {...} {
global txresults rxresults
set portIndex [something here]
# ...
set txresults($portIndex) [stc::get $generator1 \
-children-GeneratorPortresults]
set rxresults($portIndex) [stc::get $Analyzer1 \
-children-AnalyzerPortresults]
# ...
}
当你这样做,你组中的所有这些变量命名的变量纳入变量的集合 - 数组 - ,你会得到
global txresults
do-something-with $txresults($portIndex)
这是在可理解性方面比这些更好的替代品:
global txresults_$portIndex
do-something-with [set txresults_$portIndex]
然后做只是指他们在别处
upvar ::txresults_$portIndex txr
do-something-with $txr
+0
非常感谢Donal。 – user3565150
“全局”或范围解析运算符“::”都可以完成这项工作。例如。 'set :: txresults_ $ portIndex' –
Dinesh
另外,无论何时你有一个像'txresults_ $ portIndex'这样的名字,都可以考虑使用一个数组:'txresults($ portIndex)'(使用'global txresults'或':: txresults '使其成为全球性的)。 –