如何将变量用作TCL proc参数的默认值

时间:2011-06-23 09:53:41

标签: default tcl arguments proc-object

我有一个我想用作参数默认值的变量:

proc log {message {output $::output}} {
   ....
}

有没有办法做到这一点或需要我评估我的proc中的变量?

3 个答案:

答案 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
    }
}