При определении процедуры в tcl, как показано ниже, как я могу назвать proc, определяющий только a и c? Есть какой-либо способ сделать это?Задайте 2 переменные по умолчанию в процедуре tcl
proc test1 { a {b 2} {c 3} } {
puts "$a $b $c"
}
При определении процедуры в tcl, как показано ниже, как я могу назвать proc, определяющий только a и c? Есть какой-либо способ сделать это?Задайте 2 переменные по умолчанию в процедуре tcl
proc test1 { a {b 2} {c 3} } {
puts "$a $b $c"
}
Вот один метод, немного хаотичным, что вы надеетесь, но не слишком запутанна:
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
В случае, если это нужно сказать, 'a' все еще может быть обязательным параметром, используя' {a args} '. Если вы все еще хотите 'a' появиться в' values', используйте (например) 'set set values [list a $ a b 2 c 3]'. –
Спасибо Гленн и Питер, я присоединился к своим сообщениям, и я получил
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
Nope. Вы не можете пропустить этот аргумент. – Dinesh
Есть ли способ предоставить 2 или более значения по умолчанию независимо от того, что это такое? – Ericson