我已經使用一個類變量的以下兩個版本:差
::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] }
先設定,然後回來這個值,我會得到兩個不同的行爲,具體取決於哪個版本上面我已經習慣了聲明變量。 在第一個未初始化的情況下,訪問將總是拋出:
can't read "_id": no such variable
但與第二個聲明,它將按預期工作,返回任何初始值,或者如果它已經改變,新的價值。
注1:通過我的訪問設定值始終有效。
s info variable _id
將報告
protected variable ::hwascii::Subcase::_id -1 42
或
protected variable ::hwascii::Subcase::_id <undefined> 42
取決於我是否有初始化版本與否。
注2: 訪問器是一個單線程,因爲它是在一個proc中生成的,它使用concat和uplevel來生成一種「默認」訪問器。
注3: 我的TCL的版本是8.5 ITCL的我的版本是3.4 都無法改變
問: 我有一個有效的解決方案了,但想了解有什麼區別。一個很好的解釋會回答我的問題,一個指向一個好的文檔也將是不錯的,但obvisously一個鏈接:
http://www.tcl.tk/man/tcl8.6/Itcl4.0.0Cmd/class.htm#M22
或更一般不會做。
感謝這個解釋。雖然我還沒有完全明白我的問題。爲什麼變量沒有在賦值之後定義,並且可以使用「info變量」返回值? – Ingo
我編輯了我的問題,使其更加明顯,我在設置變量之前嘗試獲取值。 – Ingo
不,變量_is_在賦值後定義。我將你的代碼複製到解釋器中(糾正類名)。它完全按照預期工作。 –