2

我正在使用形成数据包内容的函数 (A)。该函数接受任意数量的参数。我希望实现另一个功能(B),形成由(A)形成的最后一个数据包。我希望通过在我上次使用 (A) 的相同参数上运行 (A) 来做到这一点。诀窍是(A)使用类似的东西接受未知数量的参数

proc example {first {second ""} args}

有没有什么简单的方法可以快速保存所有参数,然后稍后再次使用相同的参数调用 (A)?

4

2 回答 2

5

最简单的方法是在运行时A创建B,借助以下工具非常简单info 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 回答