假设我在Itcl中实现了以下代码。
package require Itcl
itcl::class A {
constructor {} { puts $this }
destructor {}
public method Print {} { puts "ok" }
}
itcl::class B {
constructor {} { }
destructor {}
public method returnA {} { return [A #auto] }
}
B b ;# create an instance of class B
set obj [b returnA] ; #assign return value to obj
$obj Print ;# should treat obj as an A type and print ok
现在,出现以下错误:
无效的命令名称“ 0”
在执行时
“ $ obj打印”
我知道我需要将范围添加到变量或Print命令中,以调用与类A相关的Print方法。 但是我真的不知道如何。
我还阅读了以下帖子:
How to get a reference on the Itcl class member variable?
但是它没有说明如何将返回值视为特定的类类型变量
答案 0 :(得分:1)
您必须限定类A
尚未创建的实例的名称:
A [namespace current]::#auto
否则,将以非限定的方式返回创建的对象的名称(0
,a0
,...),对于调用方的范围,无法将其解析为Tcl命令。 returnA
。