我们可以在tclOO中定义静态函数吗?
在itcl中,可以在允许我们可以在tclOO中定义静态函数吗?,tcl,Tcl,在itcl中,可以在允许 namespace eval ns {set ::ns::i 0} ::itcl::class clsTest { set ::ns::i 0 ; proc i {} { return [incr ::ns::i] } } clsTest::i 1 tclOO中是否有对此的支持?来自tclOO wiki,网址: 类(大部分)是TclOO中的普通对象,因此您可以在类本身上创建实例方法。这就是类声明上下文中的self,它
namespace eval ns {set ::ns::i 0}
::itcl::class clsTest {
set ::ns::i 0 ;
proc i {} {
return [incr ::ns::i]
}
}
clsTest::i
1
tclOO中是否有对此的支持?来自tclOO wiki,网址:
类(大部分)是TclOO中的普通对象,因此您可以在类本身上创建实例方法。这就是类声明上下文中的
self
,它是一种强大的技术:
oo::class create clsTest {
self {
variable i
method i {} {
return [incr i]
}
}
}
之后,您可以执行以下操作:
clsTest i
# ==> 1
clsTest i
# ==> 2
clsTest i
# ==> 3
请注意,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
}
谢谢,我帮了大忙。
oo::class create clsTest {
self {
variable i
method i {} {
return [incr i]
}
}
}
clsTest i
# ==> 1
clsTest i
# ==> 2
clsTest i
# ==> 3
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
}