クラス変数の次の 2 つのバージョンを使用しました。
::itcl::class Subcase {
variable _id
}
と
::itcl::class Subcase {
variable _id -1
}
明らかな唯一の明らかな違いは、前者には初期値がないことです。次のように定義されているアクセサを使用する場合:
public method ::hwascii::Subcase::Id {{newValue __keep__}} { if {$newValue != "__keep__"} { set _id $newValue }; return [set _id] }
最初に設定してからその値を取得するには、変数の宣言に使用した上記のバージョンに応じて、2 つの異なる動作が得られます。初期化されていない最初のケースでは、アクセサーは常に次をスローします。
can't read "_id": no such variable
しかし、2 番目の宣言では、期待どおりに動作し、初期値を返すか、変更されている場合はその新しい値を返します。
注 1: アクセサーを介して値を設定すると、常に機能します。
s info variable _id
いずれかを報告します
protected variable ::hwascii::Subcase::_id -1 42
また
protected variable ::hwascii::Subcase::_id <undefined> 42
初期化されたバージョンがあるかどうかによって異なります。
注 2: アクセサーは、concat と uplevel を使用して一種の「デフォルト」アクセサーを生成する proc で生成されるため、ワンライナーです。
注 3: tcl の私のバージョンは 8.5 です itcl の私のバージョンは 3.4 です どちらも変更できません
質問: 現在、有効な解決策がありますが、その違いを理解したいと考えています。良い説明は私の質問に答えます。良いドキュメントへのポインタもいいでしょうが、明らかに次へのリンクです:
http://www.tcl.tk/man/tcl8.6/Itcl4.0.0Cmd/class.htm#M22
またはさらに一般的にはしません。