以下委派不起作用。
我怎么才能让它工作?
package require itcl
itcl::extendedclass Tail {
method wag {} {
return "Wag, wag, wag"
}
}
itcl::extendedclass Dog {
delegate method wag to tail
constructor {} {
set tail [Tail #auto]
}
}
puts [info patchlevel]
puts $itcl::patchLevel
Dog dog
dog wag错误屏幕截图:

发布于 2021-07-11 22:08:57
仔细查看之后,我发现问题在于Tail实例是在Dog名称空间中创建的(而不是在dog的实例名称空间或全局范围中创建的)。这很奇怪,但与构造函数中的当前名称空间是::Dog名称空间这一事实相关联。这不是问题,除非Itcl实例构造返回非限定名称,并且处理委托时的当前命名空间与创建Tail实例时的命名空间不同。
我的证据?这一点:
% info class instances Tail
::Dog::tail0但它确实表明,我们可以通过将Dog的定义更改为:
itcl::extendedclass Dog {
delegate method wag to tail
constructor {} {
# Convert the name into its fully qualified form right now
set tail [namespace which [Tail #auto]]
}
}这样,我们就可以做到:
% Dog dog
dog
% dog wag
Wag, wag, wag在我看来还可以。
https://stackoverflow.com/questions/68336192
复制相似问题