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

发布于 2024-11-16 22:49:32 字数 139 浏览 3 评论 0原文

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

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

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

I've got a variable that I would like to use as default value for an argument:

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

Is there a way to do this or need I to evaluate the variable inside my proc?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

抽个烟儿 2024-11-23 22:49:32

是的,但您不能在参数列表中使用大括号 ({})。您可以这样声明该过程:

proc log [list message [list output $::output]] {
   ....
}

但请注意:
变量在声明过程时计算,而不是在执行时计算!

Yes, but you cannot use curly braces ({}) for your argument list. You declare the procedure e.g. this way:

proc log [list message [list output $::output]] {
   ....
}

But be aware:
The variable is evaluated at the time when the procedure is declared, not when it is executed!

盛夏尉蓝 2024-11-23 22:49:32

如果您想要一个仅在调用时定义值的默认参数,则必须更加棘手。关键是您可以使用 info level 0 获取当前过程调用的参数列表,然后只需检查该列表的长度:

proc log {message {output ""}} {
    if {[llength [info level 0]] < 3} {
        set output $::output
    }
    ...
}

记住,在检查参数列表时,第一个是命令本身的名称。

If you want a default argument that is only defined in value at the time you call, you have to be more tricky. The key is that you can use info level 0 to get the list of arguments to the current procedure call, and then you just check the length of that list:

proc log {message {output ""}} {
    if {[llength [info level 0]] < 3} {
        set output $::output
    }
    ...
}

Remember, when checking the list of arguments, the first one is the name of the command itself.

情话已封尘 2024-11-23 22:49:32

另一种方法可以做到这一点:

proc log {message {output ""}} {
    if {$output eq ""} {
        set output $::output
    }
}

Another way to do this:

proc log {message {output ""}} {
    if {$output eq ""} {
        set output $::output
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文