我找到了两种实例化类的方法:
一种是:
class_name create instance
instance class_method
另一种是:
set instance [class_name new]
$instance class_method
每种方法都很有效,那么这两种方法之间有什么区别吗?
唯一的区别
是类上的new
方法为您生成了一个唯一的名称,使用create
方法可以指定名称。两者都提供了,因为每个方法都有用例。用对你有意义的。(请注意,类对象本身总是命名的,因为它们通常是如何使用的,因此通常不能使用new
创建类;它隐藏在oo::class
实例上。(
仅为完整起见,还有一种创建实例的附加方法createWithNamespace
,它还允许您指定对象的状态命名空间的名称。默认情况下,它不会公开(您必须手动export
才能正常使用(,对于那些不做深度恶作剧的人来说,它是非常专业的。你可能不想用它。
在未来的某个时刻,new
可能会得到增强,这样它也可以为对象启用垃圾收集,而create
则不会(因为您知道带外的名称(。具体来说,我已经为Tcl 9.0编写了一个提示,但我还没有一个有效的实现,所以不要屏住呼吸。
我试过一些案例,
类定义如下:
oo::class create class_name {
variable text
method add {t} { set text $t }
method print { } { puts $text }
}
第一种方式:
class_name create foo
foo add "abc"
foo print
class_name create foo
它将返回:
abc
Error: can't create object "foo": command already exists with that name
第二种方式:
set foo [class_name new]
$foo add "abc"
$foo print
set foo [class_name new]
$foo add "def"
$foo print
它将返回:
abc
def
这是我发现的一个区别,而且secnod方式似乎更方便。
仍然期待大师提供权威的答案或文件。