2016-06-14 1 views
2

Lors de la définition d'une procédure dans tcl comme celle ci-dessous, Comment puis-je appeler le proc définissant juste a et c? Est-ce qu'il y a un moyen de faire ça?Définir 2 variables par défaut dans une procédure tcl

proc test1 { a {b 2} {c 3} } { 
    puts "$a $b $c" 
} 
+1

Non. Vous ne pouvez pas ignorer l'argument. – Dinesh

+0

Est-il possible de fournir 2 valeurs par défaut ou plus, quelle qu'elle soit? – Ericson

Répondre

4

est ici une technique, un messier de peu que ce que vous espérez, mais pas trop en désordre:

proc test1 { args } { 
    # set the default values 
    array set values {b 2 c 3} 

    # todo: validate that $args is a list with an even number of items 

    # now merge in the args 
    array set values $args 

    # and do stuff with the values ... 
    parray values 
} 

test1 a 10 c 14 

Vous voyez parfois des applications utilisent cette technique où les clés du tableau ont un important tableau de bord, à ressembler à des options:

proc test1 args { 
    array set values {-b 2 -c 3} 
    array set values $args 
    parray values 
} 

test1 -a 10 -c 14 
+1

Dans le cas où cela doit être dit, 'a' peut toujours être un paramètre requis en utilisant' {a args} '. Si l'on veut toujours que 'a' apparaisse dans' values', utilisez (par exemple) 'array set values ​​[liste a $ a b 2 c 3]'. –

2

Merci Glenn et Peter, je rejoins vos messages et je suis

proc test1 { a args } { 
    array set valores [list a $a -b 2 -c 3] 
    array set valores $args 
    puts "$valores(a) $valores(-b) $valores(-c)" 
} 

qui a résolu ce que je voulais.

Alors maintenant, je peux appeler

> proc 12 -c 8 
> 12 2 8