Невозможно скрыть конструктор в [incr Tcl] - PullRequest
0 голосов
/ 21 января 2011

Рассмотрим код ниже.

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 так себя ведет?

1 Ответ

0 голосов
/ 21 января 2011

Я полагаю, что так работает 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 ...? 

вы можете видеть, что приватный / защищенный может применяться к команде, но не к строителю или деструктору. Просмотр здесь документации по шаблонам проектирования itcl также может дать некоторые подсказки о том, как достичь чего-то близкого к частному конструктору.

...