Tcl:添加实例类的不同方法之间的差异

  • 本文关键字:方法 之间 添加 实例 Tcl tcl
  • 更新时间 :
  • 英文 :


我找到了两种实例化类的方法:

一种是:

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方式似乎更方便。

仍然期待大师提供权威的答案或文件。