如何在不启动tcl shell的情况下为itcl类提供资源

时间:2014-05-20 18:42:00

标签: tcl itcl

使用此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时,我收到以下错误
% source /home/manid/scripts/test.tcl
class "A" already exists

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

1 个答案:

答案 0 :(得分: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这样的东西才能获得那种灵活性。