2011-10-18 2 views
1

Je veux faire plusieurs objets, tous avec les mêmes paramètres, donc j'ai essayé de les stocker dans un proc qui les renvoie. Mais l'interpréteur évalue le résultat retourné comme un paramètre, au lieu de plusieurs. mon proc est:Utilisation de proc pour dupliquer les paramètres dans Tcl

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

et je l'utilise avec:

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

Comment puis-je les transforme en plusieurs paramètres différents?

Répondre

7

Avec tcl 8.5 et ci-dessus utilisent le {*} opérateur pour élargir la liste des paramètres:

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

avec les versions précédentes, vous pouvez étendre la liste à l'aide eval:

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

qui est équivalent.

+0

Ou: 'eval [liste $ this/zinc ajouter rectangle 1 $ coords] [élément_param]' puisqu'il s'agit d'une liste retournée, même si elle est construite de manière horrible. –

+0

@ FellowsDonald, pourquoi est-il construit d'une manière horrible, et quelle est une meilleure façon de le construire? – SIMEL

+1

@Ilya: Il est préférable d'utiliser la commande 'list', car cela fait l'affaire de citer si vous décidez que vous avez besoin d'options avec un espace (par exemple). Bien qu'il soit possible de citer ces choses à la main, cela est ** fortement déconseillé ** parce qu'il est facile de se tromper; utilisez 'list' (ou l'une des autres commandes qui fait une liste) et faites-le correctement pour vous, automatiquement. –

Questions connexes