[xyzzy:03593] Re: sub-class でなければ sub-closure というんでしょうか、
- Subject: [xyzzy:03593] Re: sub-class でなければ sub-closure というんでしょうか、
- From: Tetsuya Kamei <kamei@xxxxxxxxxxxx>
- X-mailer: Denshin 8 Go V321.2b5
- X-yzzy-version: 0.1.0.110
花井さん、こんにちは。
Wed, 17 Nov 1999 22:34:47 +0900 の
[xyzzy:03592] Re: sub-class でなければ sub-closure というんでしょうか、
への返事です.
| で、この度の亀井さんのも同じ状態になってしまいました。
あー、ですね(^^;
shadow の前にバッククオートが展開されるので、intern す
る時点では、まだ lisp パッケージの make-vector が見え
てますね。
というわけで、こうすれば intern するときには lisp パッ
ケージの make-vector は見えなくなります。
(defmacro shadowing-defun (name (&rest lambda-list) &body body)
(shadow (symbol-name name))
`(defun ,(intern (symbol-name name)) ,lambda-list ,@body))
で、インタプリタではこれでいいんですが、コンパイルする
とまた状況が変わってくるので、以下のようにすればオッケ
ーなはずです、たぶん。
(defmacro shadowing-defun (name (&rest lambda-list) &body body)
(shadow (symbol-name name)) ; これはインタプリタ用
`(eval-when (:compile-toplevel :load-toplevel :execute)
(shadow (symbol-name ',name)) ; これはコンパイル後のロード用
(defun ,(intern (symbol-name name)) ,lambda-list ,@body)))
ついでにこっちも。
(eval-when (:compile-toplevel :load-toplevel :execute)
(defvar *test-package* (defpackage "test")))
| (shadow 'lisp::make-vector)
| (defun make-vector ()
| t)
|
| ではちゃんと独立定義がなされるのですが...。
S 式が分かれていれば、(shadow ...) が評価されて、
make-vector が shadow されてから (defun make-vector ...)
が読まれるので、うまくいきます。
--
亀井哲弥(Tetsuya Kamei)
kamei@xxxxxxxxxxxx/JCA00343@xxxxxxxxxxx