使用proc在Tcl中复制参数
我想创建几个对象,所有对象都具有相同的参数,所以我尝试将它们存储在一个返回它们的进程中。但是解释器将返回的结果作为一个参数而不是几个参数进行评估。我的程序是:使用proc在Tcl中复制参数,tcl,proc-object,Tcl,Proc Object,我想创建几个对象,所有对象都具有相同的参数,所以我尝试将它们存储在一个返回它们的进程中。但是解释器将返回的结果作为一个参数而不是几个参数进行评估。我的程序是: proc element_param {} { return "-filled 1\ -visible 1\ -linewidth 1\ -linecolor yellow\ -fillcolor yellow\ -relief roundraised
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]
如何将它们转换为几个不同的参数?对于tcl 8.5及更高版本,使用{*}运算符展开参数列表:
$this/zinc add rectangle 1 $coords {*}[element_param]
对于以前的版本,您可以使用eval展开列表:
eval [linsert [element_param] 0 $this/zinc add rectangle 1 $coords]
这与tcl 8.5及更高版本相当。使用{*}运算符展开参数列表:
$this/zinc add rectangle 1 $coords {*}[element_param]
对于以前的版本,您可以使用eval展开列表:
eval [linsert [element_param] 0 $this/zinc add rectangle 1 $coords]
这是等效的。或:
eval[list$this/zing add rectangle 1$coords][element\u param]
因为它是一个返回的列表,即使它是以一种可怕的方式构建的。@Donal Fellows,为什么它是以一种可怕的方式构建的,还有什么更好的方式构建它?@Ilya:最好使用list
命令,因为如果您决定需要在中包含空格的选项(例如),那么引用是正确的。虽然手工引用这些东西是可能的,但这是非常不鼓励的,因为它很容易出错;使用list
(或生成列表的其他命令之一)并自动为您正确完成。或者:eval[list$this/zing add rectangle 1$coords][element_param]
,因为它是一个返回的列表,即使它是以可怕的方式构建的。@Donal Fellows,为什么它是以可怕的方式构建的,还有什么更好的方法来构建它呢?@Ilya:最好使用list
命令,因为如果您决定需要在中包含空格的选项,那么引用就可以了(例如)。虽然手工引用这些东西是可能的,但这是非常不鼓励的,因为它很容易出错;使用list
(或生成列表的其他命令之一)并自动为您正确完成。