昨日のコメント

サブタイプのチェックでは、解決できないのではないでしょうか?classbox Fooの中でB#b()の型が宣言されていた場合、Bar, BazのどちらもB#b()をその型に合わせて定義していても、参照するclassbox拡張インスタンス変数が異なっているように書くことができるので。尤もそのようなプログラムをわざわざ書くことはないかもしれません。あるいは、僕が思っているサブタイプの意味が違っているのかも。

静的な型を付けて書いたほうが、わかりやすかったですね。Rubyでは変数宣言がないので、変数の代入の時点でその変数が存在しなければ、現在のclassboxで拡張された変数という気持ちで書きました。型宣言のない言語でclassboxがどんな感じになるのかという点にも興味があるのですが、そういうことを混ぜてやってしまうから、余計わかりにくくなるんでしょうね。