2011-01-21 198 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