[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Method-lambda and apply-method-lambda
- To: Patrick H Dussud <DUSSUD@Jenner.csc.ti.com>
- Subject: Method-lambda and apply-method-lambda
- From: Gregor.pa@Xerox.COM
- Date: Mon, 28 Mar 88 11:35 PST
- Cc: Common-lisp-object-system@SAIL.STANFORD.EDU
- Fcc: BD:>Gregor>mail>outgoing-mail-2.text
- In-reply-to: <2784314289-5590063@Jenner>
- Line-fold: no
Date: Fri, 25 Mar 88 14:38:09 CST
From: Patrick H Dussud <DUSSUD@Jenner.csc.ti.com>
I have two kinds of comments about your proposal. I have some minor
comments about the details of the proposal itself as well as some
serious questions about whether it can work.
I will start with the minor nits.
make-method-function GENERIC-FUNCTION QUALIFIERS SPECIALIZERS
LAMBDA-FORM &optional MACROEXPAND-ENVIRONMENT
Since, as you say, the method function captures the contract between a
class of generic function and a class of method, I think this generic
function should receive the prototype method as an argument as well.
I am not sure that I want to have to pass the method to apply-method?
If I am going to pass the method, why don't I also pass the generic
function?
Also, I am pretty sure we want to make compile work on these, which
brings me to my second point.
How does one write the following code in your proposal:
(defun advise-1-arg-method (method)
(let ((function (method-function method)))
(reinitialize-instance method
:function #'(method-lambda (a)
(format *trace-output* "~&Got arg ~S" a)
(funcall function a)))))
The point is that in this case the `method function lambda' appears
lexically in the source code. That means that it can capture the
lexical variable function. It also means that it is compiled at
compile-file time.
I think both of these are important properties. Perhaps the solution is
to have the generic function you say, but specify in addition that the
standard method returns (METHOD-LAMBDA (..) ...).
-------