有一个功能:
% proc test {args} {llength $args}
如果您将两个参数传递给它,那么它将返回预期的数字二(参数的数量):
% test x y
2
如果您将两个组件的列表传递给它,那么原则上它将返回一个:
% test [list x y]
1
很明显,在我自己的函数中,我可以处理这种情况并在列表中“爬升”,但是是否可以在不更改函数的情况下以某种方式将现有列表转换为一组参数?
这是一个不太抽象的例子:库函数file
。有一个命令file split путь
将传递的路径“解析”为单独的组件,并将它们作为列表返回:
% file split /x/y
/ x y
并且有一个“相反的”命令file join компоненты
可以“组装”传递给它的组件的路径。如果将组件指定为单独的参数,它可以正常工作:
% file join / x y
/x/y
但是如果你传递一个列表,例如,由命令返回的列表,它就不起作用file split путь
:
% file join [file split /x/y]
/ x y
如何将列表转换为一组参数?
您可以使用特殊的句法构造
{*}
-参数扩展:它必须与列表参数一起写,不带空格。
正如所提供链接的提示(tcl 改进提案)中所写,此构造是在 tcl 8.5 版中引入的。显然,在早期版本中,有必要使用
eval
.