tcl中的变量替换

时间:2016-11-09 13:41:43

标签: object tcl parameter-passing

我正在运行已嵌入到另一个系统中的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执行此操作的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

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

这不起作用:

uniformDist  minAndMax  {1 $M}

因为括号会阻止替换:$M只是(子)字符串'dollar,大写m'。

这有效:

uniformDist  minAndMax  [list 1 $M]

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

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

文档: Summary of Tcl language syntax