首页 > 解决方案 > 如何将方法的返回值视为类类型 - Itcl

问题描述

假设我在 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

现在,我收到以下错误:
执行“$obj Print”时命令名称“0”无效

我知道我需要向我的变量或 Print 命令添加范围,以便调用与 A 类关联的 Print 方法。但我真的不知道如何。

我还阅读了以下帖子:

如何获取 Itcl 类成员变量的引用?

但它并没有说明如何将返回值视为特定的类类型变量

标签: classtclreturn-valueitcl

解决方案


您必须限定尚未创建的类实例的名称A

A [namespace current]::#auto

否则,所创建对象的名称以非限定方式返回(0, a0, ...),无法解析为returnA.


推荐阅读