0

考虑下面的代码。

package require Itcl 

::itcl::class A \ 
{ 
private { 
    constructor { } { } { puts "==== at A::constructor" } 

    method f { } { puts "==== at A::f" } 
} 
} 

A a ;# PASSES

a f ;# fails

对于类A,构造函数是私有的,但仍然可以定义A.

我做错了什么,还是 incr Tcl 被设计成这样?

4

1 回答 1

0

如果您查看类的规范,我相信这就是 itcl 的工作方式:

itcl::class className {
inherit baseClass ?baseClass...? 
constructor args ?init? body 
destructor body 
method name ?args? ?body? 
proc name ?args? ?body? 
variable varName ?init? ?config? 
common varName ?init? 
public command ?arg arg ...? 
protected command ?arg arg ...? 
private command ?arg arg ...? 
set varName ?value? 
array option ?arg arg ...? 
} 
className objName ?arg arg ...? 
objName method ?arg arg ...? 
className::proc ?arg arg ...? 

您可以看到 private/protected 可以应用于命令,但不能应用于构造函数或析构函数。在这里查看有关itcl 设计模式的文档也可能会提供一些关于如何实现接近私有构造函数的东西的线索。

于 2011-01-21T13:28:41.813 回答