2016-06-14 64 views
2

当在tcl中定义一个过程,如下所示,我如何调用定义a和c的proc?有没有办法做到这一点?在tcl过程中设置2个默认变量

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

都能跟得上。你不能跳过这个论点。 – 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”中,可以使用(例如)'array set values [list a $ a b 2 c 3]'。 –

2

感谢Glenn和彼得,我加入了你的帖子,我得到了

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 
相关问题