1

私は tcl に非常に慣れていないので、この言語に習熟したいと考えています。そのため、一部のサンプル コードのコードに stdout があり、一部のサンプル コードでは put のみが使用されている理由があるかどうかを質問する必要があると考えました。この本はこれを説明していないようです。標準出力を自動的に想定するように IDE が更新されましたか?

4

1 に答える 1

3

putsチャンネル名を指定しないと、コマンドは stdout に書き込みます (それ以来、この方法で機能してきました… まあ、永遠に) 。必要に応じて、入れても入れなくてもかまいません。それは問題ではありませんが、何らかの方法で行うと、物事がより明確になる可能性があります。それはあなたの選択にしましょう。への唯一の必須の引数putsは、書き込む文字列です。

パフォーマンスの面では、値を省略した方がわずかに高速ですが、ルックアップの追加コストは、IO をまったく実行するコストと比較すると、まったく取るに足らないものであるため、無視する必要があります。どちらか一方を選ぶ正当な理由は、表現の明瞭さだけです。


大事な場合もあるけど。デフォルトで標準出力に書き込むコードを書きたいが、それをオーバーライドしてファイル (またはソケットやパイプなど) に書き込むことができる場合は、チャネル名を変数に格納する方がはるかに簡単です (そのstdoutもちろん、デフォルトでに設定されています)。そのように、コードはすべて同じですが、1 つのビットを除いては同じですclose stdout。通常はお勧めできません。これは、次のようなコードで簡単に回避できます。

# Also don't want to close stdin or stderr...
if {![string match std* $channel]} {
    close $channel
}
于 2013-01-14T10:58:16.797 に答える