Shiro Kawai
shiro****@lava*****
2003年 1月 15日 (水) 16:46:27 JST
From: Makoto Satoh <makot****@yahoo*****> Subject: [Gauche-devel-jp] (define-method wdb-get ((db <dbm>) key . option) ... ) Date: Wed, 15 Jan 2003 15:46:35 +0900 (JST) > (define-method wdb-get ((db <dbm>) key . option) ... ) > > となっています。 > > この (db <dbm>) は、db という変数は <dbm> クラスのインスタンスだ、 > と、いわば型を指定している、という理解でよろしいのでしょうか? そうです。 メソッドディスパッチの流れはおおまかに言うと、 (1) generic functionが呼ばれる (2) 引数の型にマッチするメソッドの集合が選ばれる (3) 型がなるべくspecificなものが先に来るようにメソッドがソートされる (4) 最初のメソッドが呼ばれる。以降、next-methodが呼び出される度に (3)でソートされた次のメソッドが呼ばれる となります。 シングルディスパッチのオブジェクトシステムでオブジェクトがメソッドを 抱えてる処理系に比べるとものすごく重そうに見えますが、多くの場合は (2)の段階でメソッドがかなり絞られます。 オブジェクトシステム関係のドキュメントを全然書いてないので申し訳 ないんですが、このあたりの仕様はほぼstklosと同じなのでstklosの ドキュメントを見て頂くか、あるいはCLOS系のドキュメントも参考に なるかもしれません。 --shiro