在tcl过程中设置2个默认变量
在tcl中定义一个过程(如下面的过程)时,如何调用仅定义a和c的过程?有没有办法做到这一点在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
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]
。