2011-01-21 79 views
0

考虑下面的代码。不能隐藏构造函数[incr Tcl]

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被设计为表现如此?

+0

我明白整个大括号的宗教信仰,但我从来没有理解为什么人们坚持要在语言中使用它,如果没有额外的句法结构,它就不被支持。 2011-01-21 15:39:53

回答

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 ...? 

你可以看到,私营/受保护的可应用于命令,但不给constrcutor或析构函数。在关于itcl设计模式的文档中寻找here也可能给出一些关于如何实现一些接近私有构造函数的线索。

+0

我发现没有办法获得私人构造函数。看起来这只是一种语言缺陷。 – Vahagn 2011-01-21 18:36:23

相关问题