Function 将动态参数传递给foreach命令
我想动态地将参数(var list)传递给Function 将动态参数传递给foreach命令,function,arguments,tcl,Function,Arguments,Tcl,我想动态地将参数(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 "forea
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
部分作为动态参数传递。如何执行此操作?我认为问题的根源在于您使用的是文本字符串$names
,而不是$foreachArg
变量中的变量$names
。如果您这样做,可能会更容易:
set foreachArg "name $names"
但这将导致$foreachArg
包含简单的列表名称Alice-Bob-Charlie
所以这会更好:
set foreachArg "name [list $names]"
foreach {*}$foreachArg {puts $name}
如果仍要使用大括号,则可能需要先使用大括号通过变量
$foreachArg
来“转换”文本$foreachArg
,但仍然需要将列表更深一层:
set foreachArg {name [list $names]}
foreach {*}[subst $foreachArg] {puts $name}
所以,当您的列表还不存在时(但以后可能会从文件中删除),那么有必要使用bracs方法,对吗?我会选择:
set-foreachArg[list-name$names]
…