我正在运行已嵌入到另一个系统中的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执行此操作的正确方法是什么?
答案 0 :(得分:3)
使用$
和变量的名称(例如$M
或${M}
)表示变量替换。
这不起作用:
uniformDist minAndMax {1 $M}
因为括号会阻止替换:$M
只是(子)字符串'dollar,大写m'。
这有效:
uniformDist minAndMax [list 1 $M]
因为列表的参数将在返回列表{1 1000}
之前进行评估并传递给uniformDist
。
表单"1 $M"
也可以使用,可以使用命令替换[set M]
代替上面的变量替换。