我正在使用形成数据包内容的函数 (A)。该函数接受任意数量的参数。我希望实现另一个功能(B),形成由(A)形成的最后一个数据包。我希望通过在我上次使用 (A) 的相同参数上运行 (A) 来做到这一点。诀窍是(A)使用类似的东西接受未知数量的参数
proc example {first {second ""} args}
有没有什么简单的方法可以快速保存所有参数,然后稍后再次使用相同的参数调用 (A)?
我正在使用形成数据包内容的函数 (A)。该函数接受任意数量的参数。我希望实现另一个功能(B),形成由(A)形成的最后一个数据包。我希望通过在我上次使用 (A) 的相同参数上运行 (A) 来做到这一点。诀窍是(A)使用类似的东西接受未知数量的参数
proc example {first {second ""} args}
有没有什么简单的方法可以快速保存所有参数,然后稍后再次使用相同的参数调用 (A)?
最简单的方法是在运行时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]]
改为使用。
好吧,您可以使用全局数组来存储参数:
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