1

さて、私はtclの経験があまりありませんが、今日いくつかのテストケースを書いている間、突然、コンパイラーは「行方不明」と言い続け 、すべてが正しいことを確認するために、少なくとも50〜60のブレースペアのように通過する必要がありました、そしてこの間違いに約1.5時間費やした後、コメントを「}」で閉じるのを忘れたことがわかって本当にイライラした ので、以下は私のコメントのコードです

#test XmlDAOTest-1.15 {Test XmlDAO - method - 'ProcessCDATASectionNode'\

ご覧のとおり、私はその行にコメントを付けましたが、コメントはコンパイルされて構文がチェックされることは想定されていないため、「}」で閉じませんでした。コンパイラが「\」の後に「}」を追加した後でのみです。私の結果。私は以下を使用しています

IDE - Eclipse Indigo  Version of Tcl - Tcl/Tk 8.5 with tclOO  

Version: Indigo Service Release 2  Tcltest, tDom all included 

Build id: 20120216-1857

これがIDE側の欠陥なのか、それともTCL / Tkに固有の欠陥なのか、TClに問題があるのか​​、このような問題が発生したのかどうかを知りたいです。

4

2 に答える 2

2

行末の「\」も継続マーカーであるため、コメントに次の行をプルしている可能性があります。

例えば

#puts "1";\
puts "2";
puts "3";

2行目はコメントの一部として扱われるため、3を出力します。

于 2012-09-21T04:09:45.410 に答える
1

表示されている問題は、IDEではなくTclが原因です。そうは言っても、これはTclの「問題」ではなく、コードの解析方法のアーティファクトにすぎません。Tclでは、hasシンボルは、コマンドの開始が有効な場所でのみコメントを開始するため、コメントは残りのコードと同時に解析する必要があります。コードはコメントを削除するために「前処理」されていないため、引用符と中括弧のバランスをとる必要があります。

解析がこのように行われる理由の例を示すには、次のようにします。

set x #abc

上記の行では、xの値はです#abc。コメントが前処理された場合、上記はちょうどに変換されset x 、残りは消えます。

同じ線に沿って、そして別の場所で多くの人がコメントで噛まれます:

switch -exact -- $myvalue {
    # this is not a comment
    "a value" { do something }
    "another value { do something }
}

上記で#は、、、、isおよびaはすべてスイッチケースです。このように見ることもできます(これは同じことです)

switch -exact -- $myvalue {
    "#" { this }
    "is" { not } 
    "a" { comment }
    "a value" { do something }
    "another value" { do something }
}

これは、case値を検索するswitchステートメントの内部が、コマンドの有効な場所ではないためです。そのため、#は他の文字と同じ通常の文字です。

于 2012-09-23T04:01:24.150 に答える