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