我正在做实习,实习需要我学习和练习TCL - OO所以我一直在寻找TCL - OO的教程,例子和书籍,但我找不到任何东西,所以如果有人能的话,我会非常感激给我一些关于TCL的好建议 - OO。
我在网上进行了一些研究并发现了这些材料
链接: http://www.tcl.tk/cgi-bin/tct/tip/257
图书: TCL / TK开发人员指南clif Flynt第3版 - 在TCL只有2章 - OO
所以除了这两个参考文献之外,如果有人可以用额外的材料指导我,那将是非常好的提前感谢
答案 0 :(得分:5)
有点晚了,但是......
的教程答案 1 :(得分:4)
披露:我写了TclOO(在设计和测试中得到了很多其他人的帮助)。
TclOO允许非常简单的使用,但是当你开始使用它的大部分功能时,它会变得非常复杂。这是一个快速的样本:
# Make a class
oo::class create Example {
variable x ;# Not the same as [variable] in a namespace!
constructor {} {
set x 1
}
method bar {} {
return [incr x]
}
}
Example create foo ;# Make an instance
puts [foo bar] ;# Call the instance to get 2
puts [foo bar] ;# Call the instance to get 3
puts [foo bar] ;# Call the instance to get 4
foo destroy ;# Kill the instance
编写一个类非常简单,上面的内容足以让你做很多事情。有一些未列出的基本功能:superclass
允许您命名类的父类,它默认为oo::object
,它是所有对象的类; forward
允许您将方法调用分派给另一个命令,这是一种简单的委托; destructor
允许你写出当对象消失时调用的东西;执行Example new
会创建一个对象而不命名它,创建的对象的名称是调用它的结果;当前对象的名称是在方法中调用self
的结果。
构造函数和方法可以像基本的Tcl proc
命令一样使用参数。析构者不能。
对象可以是rename
d,就像任何其他Tcl命令一样,info object
和info class
下面有一大堆内省可用。您可以将特殊的每对象行为附加到oo::objdefine
的任何对象。每个对象都有一个私有命名空间,您可以使用它来存储状态(上面示例中的x
变量所在的位置)。
默认情况下,如果方法的名称不是以小写字母开头,则不会导出方法(严格来说,它取决于它是否与glob模式“[a-z]*
”匹配)。如果您愿意,可以更改此内容。
类本身就是对象(oo::class
的实例),这就是为什么它们是通过调用oo::class create
创建的; 他们的构造函数将您提供的脚本传递给命令oo::define
,该命令负责定义类的行为。 create
和new
方法只是:创建这些类的实例的类的方法(分别命名为/ unnamed)。
您可以使用多重继承。和mixins。和过滤器。并添加一个调度处理程序来处理调用未知方法的尝试。
您可以将oo::class
本身子类化,以便您定义制作和管理对象的新方法。
您可以在运行时更改任何对象的类(oo::object
和oo::class
除外;出于理智原因,它们会被特别锁定。)
...
是的,我是TclOO的作者,但我仍然在探索我的创作可以做些什么。我已经非常努力地确保能够做出你提出的任何事情。
答案 2 :(得分:3)
您所拥有的链接是针对正在开发的Tcl 8.6所包含的新OO支持,此OO子系统上的资源可能更难找到,而且可以按原样使用,我相信它的目标是更多作为其他OO包的基础。
对于Tcl 8.5及更早版本,有一些'添加'OO包,这些的良好起点是here。我过去使用过incr_Tcl和XOTcl,你应该能够找到合理数量的信息,他们的主页上有在线手册,教程和例子。