使用一个列表作为多变量,例如格式参数

Use one list as multi variable, such as format argument

在 Tcl 中

set f "%-3s %-3s %-3s"
set t {"aaa" "bbb" "ccc"}
puts [format $f $t]

我知道不对,会return错误:

not enough argument

那么如何纠正呢?

您可以使用 list expansion(从 Tcl 8.5 开始):

set f "%-3s %-3s %-3s"
set t {"aaa" "bbb" "ccc"}
puts [format $f {*}$t]

在以前的版本中,您必须使用 eval,不推荐

puts [eval format $f $t]

由于format的说明符和参数的数量是固定的,为什么不用lassign:

% lassign $t v1 v2 v3
% puts [format $f $v1 $v2 $v3]
aaa bbb ccc

一般来说,扩展运算符 {*} 是有目的的,因为说明符的数量,因此,参数是有些动态的。但在静态情况下,当使用 lassign 时,您最终会得到一个更健壮的脚本。在 t 中设想您的列表大小不同,而 format 需要正好三个值参数?