我有一个我想用作参数默认值的变量:
proc log {message {output $::output}} {
....
}
有没有办法做到这一点或需要我评估我的proc中的变量?
答案 0 :(得分:11)
是的,但您不能将花括号({}
)用于参数列表。您声明了该程序,例如这样:
proc log [list message [list output $::output]] {
....
}
但请注意:
在声明过程时评估变量,而不是在执行过程时评估变量!
答案 1 :(得分:7)
如果您想要一个仅在您调用时在值中定义的默认参数,则必须更加棘手。关键是你可以使用info level 0
来获取当前过程调用的参数列表,然后你只需检查该列表的长度:
proc log {message {output ""}} {
if {[llength [info level 0]] < 3} {
set output $::output
}
...
}
请记住,在检查参数列表时,第一个是命令本身的名称。
答案 2 :(得分:1)
另一种方法:
proc log {message {output ""}} {
if {$output eq ""} {
set output $::output
}
}