我是否需要显式销毁 Tcl 中第二个 class 实例中的 1 class 实例
Do I need to explicity destory an instance of 1 class which is within an instance of a 2nd class in Tcl
假设我有 class1,由 oo::class create
创建
oo::class create class1 {
method bar {} {
class2 create bee
bee method1
}
}
现在,假设我有这段代码:
class1 create po
po bar
po destroy
我是否还要销毁 po 中的实例蜜蜂,或者我是否也应该明确销毁 po::bee?
谢谢。
bee
是在 class1
的实例的命名空间中创建的,当实例被销毁时,命名空间将被删除,bee
也会消失。
所以你不需要显式地销毁它,但是如果你处理其他命名空间中你想删除的实例,你可以将它设置为在析构函数中自动发生:
oo::define class1 destructor {bee destroy}
如果想要创建实例的方法在创建实例被销毁时不被销毁,要么在另一个命名空间中为创建的实例命名,例如::bee
,或者让方法 return 成为 class2 new
的结果,像 set cee [po bar]
一样调用它。新实例可以用作 $cee
方法参数...
文档:
oo::define,
oo::object
oo::class
的 create
方法更喜欢根据当前命名空间解析它正在创建的对象的名称(即,如果它们不是绝对名称)。这意味着当您在另一个具有非限定名称的对象的方法中调用它时,它创建的对象将被放入另一个对象中。 (您可以通过检查 create
方法的结果来验证这一点,它是为普通 类 创建的对象的完全限定名称。)反过来,这意味着当外部对象被销毁时,当删除外部对象的实例命名空间并杀死其中的命令时,内部对象也会被销毁。
让我们用一些简单的东西来演示 类:
oo::class create Inner {
destructor {
puts "Hi from an Inner"
}
}
oo::class create Outer {
method makeAnInner {} {
puts [Inner create in]
}
destructor {
puts "Hi from an Outer"
}
}
Outer create out
out makeAnInner
out destroy
打印类似(命名空间名称 将 变化)这样的内容:
::oo::Obj19::in
Hi from an Outer
Hi from an Inner
然而,更直接地调用内部对象的 destroy
方法通常更好,因为这样在析构函数中发生的任何错误都不会被丢弃。 (对于其他销毁方案,当前的内部 API 由于各种丑陋的原因无法安全地保留错误报告,特别是因为这也是一种删除路线,有时会在发生更广泛的删除时使用。)
假设我有 class1,由 oo::class create
创建oo::class create class1 {
method bar {} {
class2 create bee
bee method1
}
}
现在,假设我有这段代码:
class1 create po
po bar
po destroy
我是否还要销毁 po 中的实例蜜蜂,或者我是否也应该明确销毁 po::bee?
谢谢。
bee
是在 class1
的实例的命名空间中创建的,当实例被销毁时,命名空间将被删除,bee
也会消失。
所以你不需要显式地销毁它,但是如果你处理其他命名空间中你想删除的实例,你可以将它设置为在析构函数中自动发生:
oo::define class1 destructor {bee destroy}
如果想要创建实例的方法在创建实例被销毁时不被销毁,要么在另一个命名空间中为创建的实例命名,例如::bee
,或者让方法 return 成为 class2 new
的结果,像 set cee [po bar]
一样调用它。新实例可以用作 $cee
方法参数...
文档: oo::define, oo::object
oo::class
的 create
方法更喜欢根据当前命名空间解析它正在创建的对象的名称(即,如果它们不是绝对名称)。这意味着当您在另一个具有非限定名称的对象的方法中调用它时,它创建的对象将被放入另一个对象中。 (您可以通过检查 create
方法的结果来验证这一点,它是为普通 类 创建的对象的完全限定名称。)反过来,这意味着当外部对象被销毁时,当删除外部对象的实例命名空间并杀死其中的命令时,内部对象也会被销毁。
让我们用一些简单的东西来演示 类:
oo::class create Inner {
destructor {
puts "Hi from an Inner"
}
}
oo::class create Outer {
method makeAnInner {} {
puts [Inner create in]
}
destructor {
puts "Hi from an Outer"
}
}
Outer create out
out makeAnInner
out destroy
打印类似(命名空间名称 将 变化)这样的内容:
::oo::Obj19::in Hi from an Outer Hi from an Inner
然而,更直接地调用内部对象的 destroy
方法通常更好,因为这样在析构函数中发生的任何错误都不会被丢弃。 (对于其他销毁方案,当前的内部 API 由于各种丑陋的原因无法安全地保留错误报告,特别是因为这也是一种删除路线,有时会在发生更广泛的删除时使用。)