2016-06-14 9 views
2

При определении процедуры в tcl, как показано ниже, как я могу назвать proc, определяющий только a и c? Есть какой-либо способ сделать это?Задайте 2 переменные по умолчанию в процедуре tcl

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

Nope. Вы не можете пропустить этот аргумент. – Dinesh

+0

Есть ли способ предоставить 2 или более значения по умолчанию независимо от того, что это такое? – Ericson

ответ

4

Вот один метод, немного хаотичным, что вы надеетесь, но не слишком запутанна:

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 

Иногда вы видите приложения используют эту технику, где ключи массива имеют дефис, чтобы выглядеть варианты:

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

test1 -a 10 -c 14 
+1

В случае, если это нужно сказать, 'a' все еще может быть обязательным параметром, используя' {a args} '. Если вы все еще хотите 'a' появиться в' values', используйте (например) 'set set values ​​[list a $ a b 2 c 3]'. –

2

Спасибо Гленн и Питер, я присоединился к своим сообщениям, и я получил

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)" 
} 

, который решил то, что я хотел.

Так что теперь я могу назвать

> proc 12 -c 8 
> 12 2 8