[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:03590] Re: sub-class でなければ sub-closure というんでしょうか、



花井さん、こんにちは。

    Wed, 17 Nov 1999 18:29:28 +0900 の
   “[xyzzy:03587] sub-class でなければ sub-closure 	というんでしょうか、”
    への返事です.

| どこらへんがおかしいのでしょう?

Load 時の動作は、「S 式をひとつ読む -> 評価する」とい
う流れになります。パッケージは read したときに決まるの
で、評価する時点ではすでに

  (shadowing-defun make-vector (LENGTH INIT) ...

は、

  (test::shadowing-defun lisp:make-vector (test::LENGTH test::INIT) ...

のように読まれてしまっています。その後で shadow しても
もう遅いってわけですね。

で、どうするかってえと、たとえばこのように自力で 
intern してやれば read 時のパッケージは関係なくなりま
す。

(defmacro shadowing-defun (name (&rest lambda-list) &body body)
  (let ((new-name (intern (symbol-name name) *test-package*)))
    `(progn
       (shadow ',new-name)
       (defun ,new-name ,lambda-list ,@body))))

--
亀井哲弥(Tetsuya Kamei)
kamei@xxxxxxxxxxxx/JCA00343@xxxxxxxxxxx

Index Home