From: Nowake Date: 2004-11-04T02:26:55+09:00 Subject: [ruby-list:40166] Re: Class内Classの定義と差分ベースモジュール こんばんは、野分です。 >>アスペクト指向の勉強中に見つけたMixJuiceと差分ベースモジュールに感心した >>ので、 >>同じようなことがRubyでできないかとClass内Classで試してみました。 >> >> >AspectR はいかがでしょうか? > > アスペクト指向を引合いに出してこういうのも申し訳ないのですが、差分ベース モジュールで感心したのは 実はアスペクト指向的な部分ではなくて、   すでにあるクラス群にpatchを当てる(上書きする)ことで、別の性質を 持ったクラス群を作ることができる という部分です。 #MixJuiceの作者はポリシークラス的な使い方を強調しているようですが…… ご存じの通り、拡張性に優れたクラス群を作ることも、そのようなクラス群を扱 うこともかなり難しいことです。 #もちろん、優れた設計により扱いを容易にしたライブラリもありますが、その ようなライブラリは作るの大変ですよね 逆に、必要な機能をストレートに表現したクラス群を作成したり、そのようなク ラス群を直接Hackして改造したり するのは(前者と比べると)意外と簡単……と感じたりすることがあります。 そこで、差分ベースモジュールのPatch当ての考え方を使用して、 1. 必要な機能をストレートに表現した基本クラス群を作る 2. 上記の基本クラス群を一種の(実際に動作する)フレームワークとして、ク ラス群へのPatch当てにより 付加的な機能の追加/改造(上書き)を行った別の(基本クラス群に影響を与え ない)クラス群を作る といったことができないかな、と考えました。 まあ、手前ミソになりますが、現在作成中の Templateエンジン http://raa.ruby-lang.org/project/siki-template/ で、 サニタイズ無し版(プレーンテキスト用)とサニタイズあり版(HTML用)を実装 するのに使おうかな、と考えています。 >単純にやろうと思えば、適切なところで self を参照するようにしたら良いかと >思います。 > > インスタンス変数を使う方法よりも、こっちのほうがスマートですね。 SuperClass側にあらかじめ仕掛けを用意する必要があることには変わりません が、より自然な コードになっているかと思います。 #取りあえずはこっちかなぁ