使用此Tcl脚本:A.tcl
itcl::class ::A {
variable list1 {}
public method getList {} {
return $list1
}
}
我这样做:
source A.tcl
getList
A.tcl
方法
source
文件A.tcl
source
时,我收到以下错误% source /home/manid/scripts/test.tcl class "A" already exists
我如何克服这个错误?有没有办法在不退出shell的情况下获取类定义中的最新更改?
答案 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这样的东西才能获得那种灵活性。