5

我正在实习,实习需要我学习和练习 TCL - OO,所以我一直在寻找关于 TCL - OO 的教程、示例、书籍,但我找不到任何东西,所以如果有人能给我一些,我将不胜感激关于 TCL - OO 的好建议。

我在网上做了一些研究,发现了这些材料

链接: http ://www.tcl.tk/cgi-bin/tct/tip/257

书:TCL/TK a developer's guide 3rd edition by clif Flynt - 只有 2 章关于 TCL - OO

所以除了这两个参考资料之外,如果有人可以用额外的材料指导我,那将是非常好的提前谢谢

4

3 回答 3

7

有点晚了,但是...

有一个教程我发布到http://www.magicsplat.com/articles/oo.html

于 2014-08-06T14:28:15.467 回答
5

披露:我编写了 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让您编写在对象消失时调用的内容;doingExample new会在不命名的情况下创建一个对象,创建的对象的名称是调用它的结果;当前对象的名称是在self方法内部调用的结果。

构造函数和方法可以像基本的 Tclproc命令一样接受参数。析构函数不能。

更复杂

对象可以是renamed ,就像任何其他 Tcl 命令一样,并且在info objectinfo class. 您可以使用oo::objdefine. 每个对象都有一个私有命名空间,您可以使用它来存储状态(x上面示例中的变量所在的位置)。

如果方法的名称不是以小写字母开头(严格来说,这取决于它是否匹配 glob 模式“<code>[az]*”),则默认情况下不会导出方法。如果您愿意,可以更改此设置。

类本身就是对象(的实例oo::class),这就是为什么它们是通过调用创建的oo::class create它们的构造函数将您提供的脚本传递给命令oo::define,该命令负责定义类的行为。createnew方法就是这样:创建这些类实例的类上的方法(分别命名/未命名)。

您可以使用多重继承。和混合。和过滤器。并添加一个调度处理程序来处理调用未知方法的尝试。

您可以oo::class对自身进行子类化,以定义制作和管理对象的新方法。

您可以在运行时更改任何对象的类(除了oo::objectand oo::class;出于理智的原因,它们被特别锁定)。

…</p>

是的,我是 TclOO 的作者,但我仍在探索我的创作能做什么。我已经非常努力地确保它几乎可以满足您的任何要求。

于 2012-08-24T15:45:57.007 回答
3

您拥有的链接是包含在 Tcl 8.6 中的新 OO 支持,该支持仍在开发中,此 OO 子系统上的资源可能更难找到,虽然它可以按原样使用,但我相信它的目标更多是作为其他 OO 包的基础。

对于 Tcl 8.5 和更早版本,有许多“附加”OO 包,这里是一个很好的起点。我过去使用过 incr_Tcl 和 XOTcl,您应该能够找到关于它们的合理数量的信息,它们的主页上有在线手册、教程和示例。

于 2012-08-24T11:42:44.890 回答