2017-02-10 5 views
0

$ Projectという名前の変数を1回だけ作成する必要があります。このプロジェクトでは、計測器の複数のポートを作成する必要があります。任意の関数呼び出しがないとコードは次のようになります。1つの関数出力をtcl内の他の関数に渡す

set Project(1) [stc::create "Project" \ 
    -SelectedTechnologyProfiles {eoam ospfv2 isis dhcp} \ 
    -ConfigurationFileName {new.tcl} \ 
    -Active "TRUE" \ 
    -LocalActive "TRUE" \ 
    -Name {Project 1} ] 

    # create ports 
    set Port(1) [stc::create port -under $Project(1) -location //$ipaddress/1/1 ] 

    set Port(2) [stc::create port -under $Project(1) -location //$ipaddress/1/2 ] 

を今、私は「CREATE_PROJECT」という名前の1つの手順を作成している場合(ポートの数に応じて複数回呼ばれるかもしれない)「create_ports」という名前の別の手順、私の質問は、どのように$ Projectをcreate_portsに渡すことができるのですか? create_projectは$ Projectを返します。私はcreate_portsに$ Projectをもう一度渡す必要がありますか?または、これを達成するための簡単な方法がいくつかあります。

アドバイスをしてください。

答えて

0

コマンド呼び出しを簡単に連鎖させることができます。 [ ... ]構文は完全に一般的です。

set port [stc::create port -under [stc::create Project ...] ...] 

これを行うことをお勧めしますかどうかは、プログラムによって何が行われているかによって異なります。 (ルールは、他のコマンドと同様の操作に適用されます。手順はちょうどそれがローカルスタックフレームで実行されるスクリプトを使用して実装することが起こるコマンドです。)

0

次のようなものが必要になる場合があります

proc create_project {name number} { 
    return [stc::create "Project" \ 
     -SelectedTechnologyProfiles {eoam ospfv2 isis dhcp} \ 
     -ConfigurationFileName new.tcl \ 
     -Active TRUE \ 
     -LocalActive TRUE \ 
     -Name "$name $number" \ 
    ] 
} 

proc create_port {project number} { 
    global ipaddress 
    return [stc::create port -under $project -location //$ipaddress/1/$number ] 
} 

set pname "Project" 
set pnum 1 
set proj($pname,$pnum) [create_project $pname $pnum] 
# create ports 
for {set i 1} {$i <= 5} {incr i} { 
    set port($i) [create_port $proj($pname,$pnum) $i] 
} 
関連する問題