luna について教えて下さい (OO & luna 初心者)
守岡 知彦 / MORIOKA Tomohiko
tomo @ kanji.zinbun.kyoto-u.ac.jp
2002年 4月 15日 (月) 18:10:41 JST
守岡です。御無沙汰してます。
超浦島フォローで申し訳ありません。
(略)
中島さん> (1)me インスタンスについて luna-method をコールしたときに、
中島さん> luna-call-next-method で dad クラスの luna-test 自身がコールされ、
中島さん> (2)再帰的にコールされた dad クラスの luna-test の中の
中島さん> luna-call-next-method で初めて grandpa の luna-test method がコール
中島さん> される
中島さん> ために y が 2 回加算されてしまうようです。
中島さん> luna.el の中を色々見ていたのですが、どうも
中島さん> luna-class-find-parents-functions で method が見つかるまで、親クラスに
中島さん> 遡って method の探索をするためにこのような動作になるようです。
中島さん> [質問]
中島さん> (ア)あるクラスの親 class の method はあるが、(親クラスと同じ動作で良い
中島さん> から) そのクラス自身の method を定義しないことは OO 的に誤りなので
中島さん> しょうか?
そんなことはないと思います。
中島さん> (イ)(ア)がもし誤りの場合で、親クラスと全く同じ動作で足りる下位のクラス
中島さん> の method は一々親クラスと同じ関数定義をして、そのクラスに特化した
中島さん> method を設けるのが良いのでしょうか? それとも
中島さん> luna-call-next-method を用いて親クラスの method をコールするだけの
中島さん> method を設けるのが良いのでしょうか? それとももっと他に良い方法が
中島さん> あるのでしょうか?
なにもしなければ親クラスの method が継承されると思いますがそれではまず
いのでしょうか?
ちなみに、luna-call-next-method(その元ネタの CLOS の call-next-method)
は「陰に隠された」method を呼び出すために設けられているものだそうです。
中島さん> (ウ)(ア)がもし誤りの場合で、下位クラスに明示的な method が定義されてい
中島さん> ない場合、una 的に下位のクラスから親クラスの method をコールするの
中島さん> を禁止する必要はないでしょうか?
CLOS だと多分 method がどれかの class の持ち物であるということにはなっ
てないと思うので、そもそも下位 class の持ち物である暗黙の method とし
て扱われていることが問題であるような気がします。
ちょっと手元に CLOS 処理系を用意してないので、どなたか CLOS 処理系で同
様の例を実験していただけないでしょうか?
--
┯━…‥・懐かしい未来の記憶をふと思い出しかけた・‥…━━┯━━━┯━
││ ─ │ ─ / ─ ┼─ ┬ ─ ─┼ ┬┴─
┼┼─┼|〓━─┼ 守岡 知彦 (MORIOKA Tomohiko) <tomo @ m17n.org> ─ ─┬
┻┻━┻━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
More information about the Emacs-mime-ja
mailing list