ドキュメントを読んで、 itcl クラスの procs があなたが思うように動作するとは思わない:
プロシージャ名?args? ?体?name というプロシージャを宣言します。proc は、クラス名前空間内の通常の手続きです。メソッドとは異なり、proc は特定のオブジェクトを参照せずに呼び出されます。proc 本体が実行されると、共通データ メンバーにのみ自動的にアクセスできます。args リストが指定されている場合は、このプロシージャの使用法に関する情報が確立されます。body コマンドを使用して proc 本体を再定義できますが、args リストはこの仕様に一致する必要があります。別のクラス メソッドまたは proc の本体内で、名前を使用するだけで、他のコマンドと同じように proc を呼び出すことができます。他の名前空間コンテキストでは、proc は「className::proc」のような修飾名を使用して呼び出されます。現在のクラスで再定義されている、または別の基本クラスによって隠されている基本クラスのプロシージャ。
これについての私の読みは、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