我们可以在tclOO中定义静态函数吗?

我们可以在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,它

在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
,它是一种强大的技术:

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
}