0

itcl::scope返回 的指定成员变量的全名$this

如何调用itcl::scope同一类的另一个对象(而不是$this)?

这是一种解决方法。

itcl::class dummy {
    variable m_data

    method function { other } {
        if { [itcl::is object -class dummy $other] } {
            error "Invalid argument."
        }

        set name "@itcl $other [$other info variable m_data -name]"
        # OR
        set name [lreplace [itcl::scope m_data] 1 1 $other]

        puts "==== this is the name of m_data of of object $other: $name"
    }
}

但这很丑陋,委婉地说。

我想$other info variable m_data -name应该返回我想要的,但它只是省略了对象的上下文。

4

1 回答 1

0

没有一种很好的方式来获取这些信息,也不一定是一件好事。通常最好将对象的变量视为该对象实现的一部分,而不是其接口的一部分。因此,外部代码不应该像那样在里面闲逛;如果对象外部的某些东西(包括类的其他成员)访问变量很重要,请编写一个方法来返回对变量的引用(使用 生成itcl::scope)。

itcl::class dummy {
    variable m_data

    protected method dataRef {} { itcl::scope m_data }

    method function { other } {
        if { [itcl::is object -class dummy $other] } {
            error "Invalid argument."
        }

        set name [$other dataRef]

        puts "==== this is the name of m_data of of object $other: $name"
    }
}
于 2012-01-09T22:54:54.730 回答