我使用了以下两个版本的类变量:
::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 两者都不能更改
问题:我现在有一个可行的解决方案,但想了解其中的区别。一个好的解释将回答我的问题,一个好的文档的指针也很好,但显然是一个链接:
http://www.tcl.tk/man/tcl8.6/Itcl4.0.0Cmd/class.htm#M22
甚至更一般的都不行。