小文字で始まる名前のメソッドはpublic、その他はprivateです。 export
とunexport
を使用することもできます。
oo::class create C {
method foo args {} ;# public
method Bar args {} ;# private
method Baz args {} ;# private
export Baz ;# now it's public
method quux args {} ;# public
unexport quux ;# now it's private
}
通常Tclでは、さまざまな方法を使用してコールバックを定義できます。オブジェクトが使用するネームスペースを知り、そのネームスペースに対してmy
メソッドを修飾する必要があります。
オブジェクト内に、名前空間がself namespace
又はnamespace which my
を用いてイントロスペクトすることができるが、最も簡単な方法は、namespace code
を使用することであるから:
namespace code {my readSocket $sock}
namespace code [list my readSocket $sock]
これらの差が上段に、$sock
は変数置換を取得することですコールバックが呼び出されると、2行目でコールバックが定義されたときに置き換えられます。この呼び出しの結果は、名前空間に依存しないコマンド接頭辞であり、評価コマンドによって実行されます。コンテキスト内でsock
が表示されている必要があります。通常の名前空間変数は、variable
が呼び出されていないと表示されません。 TclOOのクラスレベルの変数は、すべてのメソッドの中で見ることができます。 (コールバックが定義されている時に発信者の名前空間内の評価sock
。)
list [info object namespace $obj]::my readSocket $sock
ドキュメント:オブジェクトの外部から
、オブジェクトの名前空間はinfo object namespace
を使用して同定することができる info、 list、 、my、 、namespace、 、oo::class、 oo::define、 Summary of Tcl language syntax
あなたの答えはありがとう。私はまた、エラーの原因を追跡しました。なぜなら、 "namespace path {:: tcl :: mathop}"を使ってmathopオペレータコマンドにアクセスしたからです。私は名前空間をインポートしてエラーがなくなりました。ありがとう、問題解決 – yaro
私はコールバックを作成するためのヘルパーコマンドを書くべきかどうか疑問に思っていましたが、上記の答えオプションが説明するように多くのことをしています。 –