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