阅读文档我不认为 itcl 类中的 procs 以您认为应该的方式工作:
过程名称?args??身体?声明一个名为 name 的过程。proc 是类命名空间中的普通过程。与方法不同,proc 被调用而不引用特定对象。当 proc 主体被执行时,它只能自动访问公共数据成员。如果指定了 args 列表,它将建立此 proc 的使用信息。body 命令可用于重新定义 proc 主体,但 args 列表必须与此规范匹配。在另一个类方法或 proc 的主体中,可以像任何其他命令一样调用 proc,只需使用其名称即可。在任何其他命名空间上下文中,proc 使用限定名称(如“className::proc”)调用。在当前类中重新定义或被另一个基类隐藏的基类中的 Procs,
我对此的解读是,proc 与它的类相关联,它可以在派生类中引用,但它没有在其中定义。例如以下作品:
package require Itcl
::itcl::class Base {
public {
proc function { } { puts "==== Base::function" }
}
}
::itcl::class Derived {
inherit Base
public {
proc function { } {
puts "==== Derived::function"
return [Base::function]
}
}
}
Base::function
Derived::function ;# FAILS