2012-03-09 9 views
3
proc test {a b c } { 
     puts $a 
     puts $b 
     puts $c 
} 
set test_dict [dict create a 2 b 3 c 4 d 5] 

は今、私はこのようなテストに辞書を渡したい:testにする方法多くの引数を持つ辞書をtclのprocに渡すには?

test $test_dict 

はそのパラメータ(キー)の同じ名前の辞書での三つの要素を選択します。予想される出力は次のようになります。

2 
3 
4 

それは辞書でa b cなくdを選択しているため。これどうやってするの?私はいくつかのコードがこのように見えるが、私はそれを動作させることはできません。

proc test {test_dic} { 
    puts [dict get $test_dic a] 
    puts [dict get $test_dic b] 
    puts [dict get $test_dic c] 
} 

set test_dict [dict create a 2 b 3 c 4 d 5] 
test $test_dict 

編集: 別の変形がdict withを使用することです:

答えて

5

私はあなたがdict getを使うべきだと思う

proc test {test_dic} { 
    dict with test_dic { 
    puts $a 
    puts $b 
    puts $c 
    } 
} 

set test_dict [dict create a 2 b 3 c 4 d 5] 
test $test_dict 

しかし、リストはまだtestなります。

+0

引数リストにはリストではなく個々の要素が含まれていますが、呼び出し時には1つの辞書だけが関数に渡されます。著者が、引数リストに渡されるときに辞書を拡張するためにいくつかの手法を使用したと思います。 – Amumu

+0

+1と 'dict with' –

+0

または' test_dict {test $ a $ b $ c} 'とdictしますが、呼び出し元を汚染します。 –

関連する問題