2016-11-09 4 views
0

私は別のシステムに組み込まれているtcl 8.5のインカネーションを実行しています。 そのシステムが受け入れ、正しくなどのコマンドを実行します:uniformDistは私が内部の視認性を持たないために、いくつかのオブジェクトであるtclでの変数の置換

uniformDist minAndMax {1 10} 

私が何か言うことができるようにしたい:

set M 1000 
uniformDist minAndMax {1 M} 

をしかし、これは動作しません。 NORセットM 1000年 uniformDist minAndMax {1 $ M}

私は試みない:どちらもそれらの作品の

u minAndMax {1 [eval $M]} 

u minAndMax {1 [eval M]} 

を。

エラーメッセージは次のとおりです。

expected a real value: unable to convert from: "$M"Error: expected fewer arguments [Error while parsing pair]

または

expected a real value: unable to convert from: "[eval"Error: expected fewer arguments [Error while parsing pair]

TCLがこれを行うことを正しい方法は何ですか?

答えて

3

変数置換は、$と変数名(たとえば$Mまたは${M})を使用して表されます。

これは動作しません:

uniformDist minAndMax {1 $M} 

を括弧で置換を防ぐために:$Mはちょうど(サブ)文字列 'ドル、大文字のM' です。

これは動作します:

uniformDist minAndMax [list 1 $M] 

リスト{1 1000}uniformDistに戻って渡される前に、リストへの引数が評価されますので。

フォーム"1 $M"も機能し、上記の変数置換の代わりにコマンド置換[set M]を使用できます。

ドキュメント: Summary of Tcl language syntax

+0

それです!ありがとう! – elbillaf

+1

1 $ M "'と '[subst {1 $ M}]'も使用していますが、 'list'コマンドは複雑な置換基を持つことがほとんどありません。 –

+0

'' 1 $ M "'はすでにテキストにあります:) –