0

在 Incr Tcl 中,我通过将类的方法更改并重新评估到正在运行的 Tcl 解释器中,从而提高了编程效率,而无需重新启动应用程序。为此,我必须使用主体语法定义类定义之外的方法,并将主体定义重新评估到正在运行的 Tcl 解释器中。这很好用。令人惊讶的是,显然是设计使然,在Incr Tcl中,

一个类只能定义一次,尽管类方法和过程的主体可以一次又一次地定义以进行交互式调试。

然而,在开发过程中,我很自然地将方法(重构)拆分为两个或多个附加方法,以便在同一个类中定义。

我想找到一种方法来强制将方法添加到正在运行的 Tcl 解释器中的现有类:

  1. 无需将类定义删除并重新评估到正在运行的 Tcl 解释器中,
  2. 无需重新启动包含要扩充的 Incr Tcl 类的现有对象实例的 Tcl 应用程序,并且
  3. 没有从所述 Tcl 解释器中删除现有对象的结果。

我只需要它作为开发/调试仪式,而不是生产代码(即,我不需要以编程方式动态添加方法)。我会接受黏糊糊的、邪恶的、后门的答案。更改 Incr Tcl 的生产副本以添加其他行为是不切实际的,因为不幸的是,我必须使用的 Incr Tcl 的二进制文件静态绑定到正在运行的进程中,并且无法通过某些共享库巫术卸载和重新加载。

4

1 回答 1

2

您可以使用以下命令重新定义类中的方法itcl::body

itcl::body helloworld::greet {} {
    puts "Goodbye Cruel World from $owner"
}

但是,您不能以这种方式将全新的方法添加到类中。好吧,当然不是在 3.4 中(我没有用 4.0 测试过):

% 包需要Itcl
3.4
% itcl::class hi {
    # 除了我们这些鸡,这里没有人...
}
% 嗨嗨
你好
% itcl::body hi::there {} {放“你好!”}
函数“there”未在类“::hi”中定义

如果您需要那种功能,您可以考虑使用 XOTcl 或(从 Tcl 8.5 开始)TclOO,它们都支持在创建后完全重新配置类。

于 2012-07-29T15:03:42.863 回答