在Incr Tcl中,通过更改然后将类的方法重新评估为正在运行的Tcl解释器,我获得了编程效率的提升,而无需重新启动应用程序。为此,我必须使用body语法在类定义之外定义方法,并将正文定义重新计算为正在运行的Tcl解释器。这很好。令人惊讶的是,显然是出于设计,在Incr Tcl,
一个类只能定义一次,尽管是类方法的主体 和procs可以反复定义以进行交互式调试。
然而,在开发过程中,我正在将方法(重构)拆分为两个或更多要在同一个类中定义的其他方法。
我想找到一种方法来强制将方法添加到正在运行的Tcl解释器中的现有类中:
我只需将其作为开发/调试仪式,而不是生产代码(即,我不需要以编程方式动态添加方法)。我会接受粘糊糊,邪恶的后门答案。更改Incr Tcl的生产副本以添加其他行为是不切实际的,因为不幸的是,Incr Tcl I必须使用的二进制文件静态地绑定到正在运行的进程中,并且无法通过某些共享库巫术来卸载和重新加载。 / p>
答案 0 :(得分:2)
您可以使用itcl::body
重新定义类中的方法:
itcl::body helloworld::greet {} {
puts "Goodbye Cruel World from $owner"
}
但是,您不能以这种方式向类中添加全新方法。好吧,当然不是3.4(我没有用4.0测试过):
% package require Itcl 3.4 % itcl::class hi { # Nobody in here but us chickens... } % hi Hi Hi % itcl::body hi::there {} {puts "Howdy!"} function "there" is not defined in class "::hi"
如果您需要这种功能,可以考虑使用XOTcl或(从Tcl 8.5开始)TclOO,它们都支持在创建后完全重新配置类。