2016-08-06 8 views
0

test内のパラメータをprocess_data内に変更し、testの値に応じてその関数外のケースを切り替える必要があります。新しい引数を受け入れない関数への参照渡し方は?

process_dataは受信したudpパケットを処理するための静的関数を表すため、upvarを参照して渡すことができず、2つ以上のパラメータ 'size and data'を受け付けません。
さらに、私が見つけた限り、process_data関数の戻り値はありません。

コード:

set test "0" 

Agent/UDP instproc process_data {size data} { 
    //some stuff 
    if (...) 
     set test "1" 
} 

// switch cases depending on test value. 

答えて

1

あなたは、あなたがエイリアスに行っている変数の名前を知っていればupvarを使用するために追加の引数を必要としません。あなたは(ない使用の両方を行う)これらのいずれかを行うことができるはず:

global test 
upvar #0 test test 

それは本当に古典的なモジュールではないが、それは動作します。

コマンドを置くのに適した場所はそうのように、プロシージャ本体の先頭にある:あなたがupvar #0 test testを使用する場合

Agent/UDP instproc process_data {size data} { 
    global test 
    # some stuff 
} 

同じこと(これらの2つのコマンドは基本的に同じです)。

ドキュメント: globalupvar

+0

私はTCL符号化における専門家ではないので、あなたはどこが好きならば私の例を使用し、それぞれを置くために、より具体的にはあなたの答えを編集してくださいすることができます。ありがとう –

+0

@ EmadAldeen:done。 –

+0

'process_data'の中で、私が好きなように' test'を変更することができますが、 'process_data'の外では、最初に設定したように' 0 'のままです。 –

関連する問題