Edebug and luna.el

TSUCHIYA Masatoshi tsuchiya @ pine.kuee.kyoto-u.ac.jp
2002年 9月 24日 (火) 20:28:09 JST


>> On Mon, 23 Sep 2002 08:10:38 +0000
>> 「土」== tsuchiya @ pine.kuee.kyoto-u.ac.jp (TSUCHIYA Masatoshi) said as follows:

土> 原因は,luna-apply-generic() で,実際に適用するべき関数定義を探す
土> 時に参照される cache にありました.一旦,method が呼び出されると,
土> 関数定義が cache されるのですが,luna-define-method() の評価時に正
土> しく cache がクリアされていませんでした.

土> この問題を回避するには,以下のような変更を行えば良いようですが,

すみません,この変更でも不十分でした.

    (require 'luna)
    (luna-define-class luna-sample)
    (luna-define-generic luna-sample-print (obj) "dummy")
    (luna-define-method luna-sample-print ((obj luna-sample))
      (prin1-to-string obj))
    (luna-define-class luna-sample-child (luna-sample))
    (luna-sample-print (luna-make-entity 'luna-sample-child))

という状況で,luna-sample クラスの luna-sample-print メソッドを edebug 
しようとしても,うまくひっかかってくれません.原因は,method cache が 
luna-sample という名前ではなく,luna-sample-child という名前でキャッシュ
されているからだと思うのですが,これをうまく解決するにはどうしたらいい
のか,良く分かりません.

    (get 'luna-sample-print 'luna-method-cache)
    -> [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 luna-sample-child 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

とりあえず,解決策としては

(1) 既に登録済みのクラスの継承関係の木構造を traverse して,当該 
    method を継承している全てのクラスの cache を clear する.
(2) cache の構造そのものを変更する.

の2つがあると思うのですが,どうしたものでしょうか….

;; とりあえず,頭を冷やして出直してきます.

-- 
土屋 雅稔  ( TSUCHIYA Masatoshi )





More information about the Emacs-mime-ja mailing list