了解Tcl多态性

时间:2010-01-25 10:52:06

标签: polymorphism tcl

在Tcl中,变量和过程可以具有相同的名称......

例如我可以

set container(alist) {}

proc container a {puts " do something"}
嗯...... tcl中还存在哪些其他形式的多态? ...我正在看一些代码,我看到这样的东西。

3 个答案:

答案 0 :(得分:7)

我认为这不是真正的多态性。

变量,无论是普通变量还是数组都可以与proc具有相同的名称,但是tcl知道哪个是来自上下文的。查看 info 命令。 <{1}}和info procs

两者存在于解释器内的不同名称空间中(顺便说一句,不要与TCL info vars命令混淆)

答案 1 :(得分:1)

多态性是指一个对象能够像不同类型的对象一样被视为和使用。在您的示例中,您有一个变量和一个具有相同名称的proc,但它们不是,实际上不能被视为彼此(变量不能像proc一样被调用,并且proc不能被视为变量)。 / p>

你也可以说TCL中没有多态性。由于TCL将所有内容视为字符串(它是无类型语言),因此没有“其他”数据类型。因此,您不能将类型A的对象视为类型B,因为不存在类型B.

您可以通过在不同的命名空间中定义具有相同名称的proc来为proc创建一种伪多态。但是,这并不像运算符重载那么多。

您可能希望阅读有关this article上的多态性的The TCLers Wiki

答案 2 :(得分:0)

这不是多态性(名称只是以不同的方式查找),但命名的三个主要方面是命令(例如,程序),变量名称空间。还有一些其他的(例如频道),但它们通常没有重叠的名称。

如果你有8.6,另一个主要的“多态”类是方法名。