在 itcl 中,可以在允许
namespace eval ns {set ::ns::i 0}
::itcl::class clsTest {
set ::ns::i 0 ;
proc i {} {
return [incr ::ns::i]
}
}
clsTest::i
1
Run Code Online (Sandbox Code Playgroud)
在 tclOO 中是否有一些支持?
类(大部分)是 TclOO 中的普通对象,因此您可以执行诸如在类本身上创建实例方法之类的操作。这就是self类声明上下文的用途,它是一种强大的技术:
oo::class create clsTest {
self {
variable i
method i {} {
return [incr i]
}
}
}
Run Code Online (Sandbox Code Playgroud)
之后,您可以执行以下操作:
clsTest i
# ==> 1
clsTest i
# ==> 2
clsTest i
# ==> 3
Run Code Online (Sandbox Code Playgroud)
请注意,new并create在实际上只是多数为普通预定义的方法(即发生在C来实现),但您可以添加其他几乎任何你想要的。当然oo::class继承自oo::object.
如果您要使类级方法也显示为可在实例上调用的方法,则您只需要技巧。我真的不推荐它,但可以使用转发方法:
oo::class create clsTest {
self { ... }
# This is actually the simplest thing that will work, provided you don't [rename] the class.
# Use the fully-qualified name if the class command isn't global.
forward i clsTest i
}
Run Code Online (Sandbox Code Playgroud)