将动态参数传递给 foreach 命令
Passing Dynamic Arguments to foreach command
我想将参数 (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
部分作为动态参数传递。我该怎么做?
我认为问题的根源是您在 $foreachArg
变量中使用文字字符串 $names
而不是变量 $names
来执行此操作。如果你这样做可能会更容易:
set foreachArg "name $names"
但这会导致 $foreachArg
包含普通列表 name Alice Bob Charlie
。
所以这样会更好:
set foreachArg "name [list $names]"
foreach {*}$foreachArg {puts $name}
如果你仍然想使用大括号,它有点复杂,因为可能需要使用 subst
来首先 'convert' 变量 $foreachArg
的文字 $foreachArg
=] 但您可能仍需要将列表在列表中更深一层:
set foreachArg {name [list $names]}
foreach {*}[subst $foreachArg] {puts $name}
我想将参数 (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
部分作为动态参数传递。我该怎么做?
我认为问题的根源是您在 $foreachArg
变量中使用文字字符串 $names
而不是变量 $names
来执行此操作。如果你这样做可能会更容易:
set foreachArg "name $names"
但这会导致 $foreachArg
包含普通列表 name Alice Bob Charlie
。
所以这样会更好:
set foreachArg "name [list $names]"
foreach {*}$foreachArg {puts $name}
如果你仍然想使用大括号,它有点复杂,因为可能需要使用 subst
来首先 'convert' 变量 $foreachArg
的文字 $foreachArg
=] 但您可能仍需要将列表在列表中更深一层:
set foreachArg {name [list $names]}
foreach {*}[subst $foreachArg] {puts $name}