2017-02-22 16 views
1

デバイスのポート番号に基づいて変数を作成しました。別の機能でそれらを使用できるように、それらをグローバルとして宣言する方法はありますか?名前が変更された変数のグローバル宣言

set txresults_$portIndex [stc::get $generator1 \ 
         -children-GeneratorPortresults] 

    set rxresults_$portIndex [stc::get $Analyzer1 \ 
         -children-AnalyzerPortresults] 
+1

'global'またはスコープ解決演算子' :: 'のどちらかがジョブを実行します。例えば。 'set :: txresults_ $ portIndex ' – Dinesh

+4

また、 'txresults_ $ portIndex'のような名前があるときは、' txresults($ portIndex) '(代わりに' global txresults'または 'txresults 'それをグローバルにする)。 –

答えて

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 
+0

ありがとうドナル。 – user3565150

関連する問題