2011-01-21 8 views
0

以下のコードを検討してください。クラスAについては[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のオブジェクトを定義することも可能です。

私は何か間違ったことをしていますか、またはincr Tclはそのように動作するように設計されていますか?

+0

私は自分自身の宗教括弧全体を理解していますが、なぜ文法上の無謀なことなしにサポートされていない言語でそれを使用しようとしているのか分かりません。

答えて

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

+0

@ VahagnそれはItclを書いた人々がコンストラクタを実装することを決めたのと、なぜ彼らがこのようにしたのかわからなくても、それが欠陥であると言うことを再考することになります。あなたは本当にprivte constuctorsを持たなければならないとあなたは何をしたいですか? – Jackson

関連する問題