クロージャを検討したときに、関数を関数オブジェクトに見立てれば構造体を表現できるということに気付きました。それに沿ってブロックベースで構造体を再実装しています。
プロトタイプベースの考え方でメソッドを定義すると、クロージャをクラスとして扱えるということは知識として知っていましたが、こういう使い方ができるとは思いませんでした。
リファクタリング
構造体を作り直すわけですが、どういう切り込み方をすれば良いのか悩みました。元の実装を書き換えると、コメントアウトしながらエラーを潰すような作業になってしまいます。かなり大量の書き換えになるため、しばらくコンパイルも通らない状況で作業を続けることになりそうです。それなら一から作り直した方がましのような気がします。そのため元の実装はそのままにしておいて、別の実装を作ることにしました。
Struct2という名前空間でブロックを継承した構造体を作りました。基礎的な部分が機能するのを確認してから、少しずつ元の実装からコピペして書き換えました。こうすれば逐一コンパイルしながら確認できて楽でした。
最後にStructを消して、Struct2をStructに改名すれば完了です。0.9-20071016は消す直前の状態です。