2011-10-18 65 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'(或者其他列表生成的命令之一),並自動爲你正確完成它。 –