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 に答える