【问题标题】:Using proc to duplicate parameters in Tcl使用proc复制Tcl中的参数
【发布时间】:2011-12-10 07:16:56
【问题描述】:

我想制作几个对象,都具有相同的参数,所以我尝试将它们存储在一个返回它们的 proc 中。但是解释器将返回结果作为一个参数来评估,而不是几个。我的过程是:

proc element_param {} {
    return "-filled 1\
        -visible 1\
        -linewidth 1\
        -linecolor yellow\
        -fillcolor yellow\
        -relief roundraised\
        -linewidth 2"
}

我将它用于:

$this/zinc add rectangle 1 [list "100" "100" "200" "200"] [element_param]

如何将它们变成几个不同的参数?

【问题讨论】:

    标签: tcl proc-object


    【解决方案1】:

    使用 tcl 8.5 及更高版本使用 {*} 运算符来扩展参数列表:

    $this/zinc add rectangle 1 $coords {*}[element_param]
    

    对于以前的版本,您可以使用 eval 扩展列表:

    eval [linsert [element_param] 0 $this/zinc add rectangle 1 $coords]
    

    这是等价的。

    【讨论】:

    • 或者:eval [list $this/zinc add rectangle 1 $coords] [element_param],因为它是一个被返回的列表,即使它是以可怕的方式构建的。
    • @Donal Fellows,为什么它的构建方式很糟糕,还有什么更好的构建方式?
    • @Ilya:最好使用list 命令,因为如果您决定需要带有空格的选项(例如),那么它对引用的作用是正确的。虽然可以手动引用这些内容,但强烈建议不要这样做,因为这很容易出错;使用list(或创建列表的其他命令之一)并自动为您正确完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多