[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
http://www.foobar.net のコンテンツを閲覧する新た な `shimbun' モジュール `foobar' を作成するとして、まず最初に 貴方がしなればならないことは、`sb-foobar.el' の冒頭に
(require 'shimbun) (luna-define-class shimbun-foobar (shimbun) ()) |
のような宣言を入れておくことです。徐々に分かると思いますので、今はおまじ
ないと思っておいて下さい。注意すべきことは、`shimbun' モジュールを
入れるファイル名の `sb-foobar.el' の `foobar' の名前と、
luna-define-class
の第一引数
の shimbun-foobar
の `foobar' の名前は合わせておく必要がある
ことです。
`Shimbun' モジュール `shimbun-foobar' がこなすべき仕事は大き く四つあります (あなたが Gnus のユーザならば、「フォルダ」を「グループ」 に読み換えて下さい):
headers
というリストに代入して返すこと。
最初の作業は `shimbun.el' の shimbun-headers
が、二番目の作
業は shimbun-get-headers
が担当します。そして三番目の作業
は shimbun-article
が、最後の作業
は shimbun-make-contents
が担当します。
`shimbun.el' の中をご覧下さい。defun
による関数定義の他に、
見慣れない luna-define-generic
, luna-define-method
などの
宣言がありますよね。どうも使用方法は defun
のそれと似ているようで
す。そして、前者は何だか doc-string だけを書いてあるようで、同名のシンボ
ルについて後者によって再度宣言しているように見えます。更に、あるシンボル
について、luna-define-generic
の宣言だけがあって、
luna-define-method
の宣言がないものもあります。
実は、`shimbun.el' 及び各 `shimbun' モジュールは、 Emacs Lisp にてオブジェクト指向プログラミングを可能とする `luna.el' (14) を利用して書かれています。
`shimbun.el' の中では、shimbun-headers
があ
る URL のウェブページのソースを取得し、shimbun-get-headers
がその
ウェブページのソースから標題などを抜き出し... という前述の手順がハー
ドコーディングされています。しかし、決め打ちするだけでは、千差万別のウェ
ブページのソースを、その構造に合わせて変化させることができません。
そこで luna
により、メソッドがコールされる手順だけ決めておいて、
`shimbun' により変化させるべきメソッドの実体定義を
各 `shimbun' モジュールに任せているのです。各 `shimbun' モジュー
ルで共通で使えそうなメソッドは `shimbun.el' の中にメソッドの実体も
定義してありますが、それすら各 `shimbun' モジュールにおいて再定義を
することが可能です。
もうお分かりのように、luna-define-generic
は、言わば殼だけの宣言、
luna-define-method
は `shimbun' モジュール毎に作成できる実体
の宣言。そして `sb-foobar.el' の冒頭に入れ
た luna-define-class
での宣言は、luna
上での新たなクラスの
宣言だったわけです。