我想将参数(var list)动态传递给foreach
命令。
我试过这个:
% set names {Alice Bob Charlie}
Alice Bob Charlie
% foreach name $names {puts $name}
Alice
Bob
Charlie
% set foreachArg {name $names}
name $names
% foreach $foreachArg {puts $name}
wrong # args: should be "foreach varList list ?varList list ...? command"
% foreach {*}$foreachArg {puts $name}
$names
% foreach {*}[set foreachArg] {puts $name}
$names
% foreach {*}[list [set foreachArg]] {puts $name}
wrong # args: should be "foreach varList list ?varList list ...? command"
这里我想将name $names
部分作为动态参数传递。我怎么能这样做?
答案 0 :(得分:1)
我认为问题的根源在于您使用文字字符串$names
而不是$names
变量中的变量$foreachArg
来执行此操作。如果你这样做可能会更容易:
set foreachArg "name $names"
但这会导致$foreachArg
包含普通列表name Alice Bob Charlie
。
所以这会更好:
set foreachArg "name [list $names]"
foreach {*}$foreachArg {puts $name}
如果您仍然想要使用大括号,那么它可能需要使用subst
来首先转换'变量$foreachArg
的文字$foreachArg
,但您仍然需要将列表更深层放在列表中:
set foreachArg {name [list $names]}
foreach {*}[subst $foreachArg] {puts $name}