2

使用这个 Tcl 脚本:A.tcl

itcl::class ::A {
    variable list1 {}
    public method getList {} {
        return $list1
    } 
}

我这样做:

  • 启动 tcl shell 并以交互方式执行source A.tcl
  • getList然后对方法进行更改A.tcl
  • 为了使更改生效,我确实重新source文件A.tcl
  • 当我重新- 时source,我收到以下错误
% 来源 /home/manid/scripts/test.tcl
“A”类已经存在

我该如何克服这个错误?有没有办法在不退出 shell 的情况下获取类定义中的最新更改?

4

1 回答 1

1

您需要以不同的方式编写代码。特别是,您必须将方法体的定义(可以重复)放在类的声明(不能重复)之外。然后,您进行条件类创建(itcl::is class作为测试人员)并用于itcl::body实际提供方法定义。

根据这些原则,将你的改写A.tcl为:

if {![itcl::is class ::A]} {
    itcl::class ::A {
        variable list1 {}
        # *Dummy* method body; method must exist, but may be empty
        public method getList {} {}
    }
}

itcl::body ::A::getList {} {
    return $list1
}

将允许您source多次更改您想要的方法主体。这并不能让您自由更改所有内容(例如,变量声明和范围规则是固定的);您需要切换到 TclOO 之类的东西才能获得这种灵活性。

于 2014-05-20T21:25:50.077 回答