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

时间:2016-06-14 00:21:13

标签: tcl proc

在tcl中定义一个如下所示的过程时,如何调用proc定义a和c?有没有办法做到这一点?

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

2 个答案:

答案 0 :(得分: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 :(得分: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