我已根据设备的端口号创建变量。如何将它们声明为全局,以便我可以在不同的函数中使用它们?
set txresults_$portIndex [stc::get $generator1 \
-children-GeneratorPortresults]
set rxresults_$portIndex [stc::get $Analyzer1 \
-children-AnalyzerPortresults]
答案 0 :(得分:2)
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