请考虑以下代码。
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
的对象。
我做错了什么,或者我的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 ...?
你可以看到private / protected可以应用于命令,但不能应用于constrcutor或析构函数。在itcl设计模式的文档中查看here也可以提供一些关于如何实现接近私有构造函数的线索。