将列表传递给Tcl程序

Jua*_*uan 15 arguments list tcl

将列表传递给Tcl过程的规范方法是什么?

我真的很喜欢它,如果我能得到它,以便列表自动扩展为可变数量的参数.

这样的东西:

set a {b c}
myprocedure option1 option2 $a
Run Code Online (Sandbox Code Playgroud)

myprocedure option1 option2 b c
Run Code Online (Sandbox Code Playgroud)

是等价的.

我相信我以前见过这个,但我无法在网上找到它.任何帮助(和代码)使两个案件等效,将不胜感激.

这被认为是标准的Tcl惯例.或者我甚至吠叫错误的树?

RHS*_*ger 21

这取决于您使用的Tcl版本,但是:对于8.5:

set mylist {a b c}
myprocedure option1 option2 {*}$mylist
Run Code Online (Sandbox Code Playgroud)

对于8.4及以下:

set mylist {a b c}
eval myprocedure option1 option2 $mylist
# or, if option1 and 2 are variables
eval myprocedure [list $option1] [list $option2] $mylist
# or, as Bryan prefers
eval myprocedure \$option1 \$option2 $mylist
Run Code Online (Sandbox Code Playgroud)

  • 我不同意这是规范的(但也许我们有不同的规范?).它可以说是最安全的,但它的可读性低于\ $ option1\$ option2,并且有点模糊了你实际想要完成的事情. (2认同)