在tcl过程中设置2个默认变量

在tcl过程中设置2个默认变量,tcl,proc,Tcl,Proc,在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

在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

谢谢Glenn和Peter,我加入了你们的职位

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

不。您不能跳过该参数。是否有任何方法可以提供2个或更多默认值?如果需要说明,
a
仍然可以通过使用
{a args}
作为必需参数。如果仍希望
a
出现在
值中
,请使用(例如
数组集值[列出a$a2c3]