2011-10-18 40 views
1

我想制作几个对象,所有对象都具有相同的参数,所以我尝试将它们存储在返回它们的proc中。但是解释器将返回结果评估为一个参数,而不是几个参数。我PROC是:使用proc在Tcl中复制参数

proc element_param {} { 
    return "-filled 1\ 
     -visible 1\ 
     -linewidth 1\ 
     -linecolor yellow\ 
     -fillcolor yellow\ 
     -relief roundraised\ 
     -linewidth 2" 
} 

,我用它来与:

$this/zinc add rectangle 1 [list "100" "100" "200" "200"] [element_param] 

如何把他们分成几个不同的参数?

回答

7

与TCL 8.5及以上使用{*}运营商扩大的参数列表:

$this/zinc add rectangle 1 $coords {*}[element_param] 

与以前的版本,你可以扩大使用eval名单:

eval [linsert [element_param] 0 $this/zinc add rectangle 1 $coords] 

这是等价的。

+0

或者:'eval [list $ this/zinc add rectangle 1 $ coords] [element_param]'因为它是一个返回的列表,即使它是以可怕的方式构建的。 –

+0

@Donal Fellows,为什么它以可怕的方式构建,以及构建它的更好方法是什么? – SIMEL

+1

@Ilya:最好使用'list'命令,因为如果你决定需要带有空格的选项(例如),那么引用就是正确的。虽然可以用手来引用这些东西,但这是**强烈不鼓励的,因为很容易出错;使用'list'(或者其他列表生成的命令之一),并自动为你正确完成它。 –