【问题标题】:Variable substitution in tcltcl 中的变量替换
【发布时间】:2016-11-09 13:41:43
【问题描述】:

我正在运行已嵌入到另一个系统中的 tcl 8.5 化身。 该系统将接受并正确执行以下命令:

uniformDist  minAndMax  {1 10}

uniformDist 是我没有内部可见性的某个对象。

我希望能够说类似的话:

set M 1000
uniformDist  minAndMax  {1 M}

但这不起作用。 也没有 设置 M 1000 uniformDist minAndMax {1 $M}

我试过了:

u minAndMax {1 [eval $M]}

u minAndMax {1 [eval M]}

这些都不起作用。

错误信息是:

期望一个真实值:无法转换自:“$M”错误:预期 更少的参数[解析对时出错]

期望一个真实值:无法转换自:“[eval”错误:预期 更少的参数[解析对时出错]

tcl 这样做的正确方法是什么?

【问题讨论】:

    标签: object tcl parameter-passing


    【解决方案1】:

    变量替换使用$ 和变量名称(例如$M${M})表示。

    这不起作用:

    uniformDist  minAndMax  {1 $M}
    

    因为大括号防止替换:$M 只是(子)字符串“美元,大写 m”。

    这行得通:

    uniformDist  minAndMax  [list 1 $M]
    

    因为 list 的参数将在列表 {1 1000} 返回并传递给 uniformDist 之前进行评估。

    "1 $M" 的形式也可以使用,并且可以使用命令替换 [set M] 代替上面的变量替换。

    文档: Summary of Tcl language syntax

    【讨论】:

    • 就是这样!谢谢!
    • 也可以使用"1 $M"[subst {1 $M}],但list 命令对复杂替换的意外最少。
    猜你喜欢
    • 2023-03-25
    • 2016-11-08
    • 2016-09-14
    • 1970-01-01
    • 2016-02-03
    • 2022-11-17
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多