2

パケットの内容を形成する関数(A)を使用しています。この関数は、任意の量の引数を受け入れます。(A)によって形成された最後のパケットを形成する別の関数(B)を実装したいと思います。これを行うには、最後に(A)で使用したのと同じパラメーターで(A)を実行します。秘訣は、(A)次のようなものを使用して未知の数のパラメーターを受け入れることです。

proc example {first {second ""} args}

すべての引数をすばやく保存して、後で同じパラメータで(A)を再度呼び出す簡単な方法はありますか?

4

2 に答える 2

5

最も簡単な方法は、実行時にA作成することです。Binfo level 0

proc A {p q {r ...} args} {
    # Make B which will call us *exactly* as we've just been called
    proc B {} [list uplevel 1 [info level 0]]
    # ... continue with normal processing ...
}

これにはいくつかの注意点があります (たとえば、エイリアスや複雑な名前空間をまたがる作業で負荷の高い処理を行っている場合) が、ほとんどのコード (特にこれが必要な種類のもの) では、それは大した問題ではありません。


8.6 では、proc B {} [list tailcall {*}[info level 0]]代わりに使用します。

于 2012-08-28T13:45:16.563 に答える
1

グローバル配列を使用してパラメータを格納できます。

proc printArguments {first {second ""} args} {
global params
set params(first) $first
set params(second) $second
set params(args) $args
}
%
%
% printArguments 1 2 3 4 5
3 4 5
%
% parray params
params(args)   = 3 4 5
params(first)  = 1
params(second) = 2
于 2012-08-28T13:09:16.700 に答える