From: Doug M. <do...@mc...> - 2003-11-25 23:31:17
|
This one's pretty easy to trigger: (defclass foo () ((bar :accessor bar :initarg :bar) (baz :accessor baz :initarg :baz))) (defmethod initialize-instance :after ((f foo) &key &allow-other-keys) (format t "Did something!")) CL-USER(4): (make-instance 'foo :bar 'baz) Error: wrong number of arguments. BREAK called. Type :CONTINUE to return from break or :RESET to return to top level. [1] CL-USER(5): :bt 0: (#<CLOSURE LAMBDA (F &KEY &ALLOW-OTHER-KEYS) (BLOCK INITIALIZE-INSTANCE (FORMAT T "Did something!"))> #<FOO @ #x1995d80> :BAR BAZ) 1: (APPLY #<CLOSURE LAMBDA (F &KEY &ALLOW-OTHER-KEYS) (BLOCK INITIALIZE-INSTANCE (FORMAT T "Did something!"))> (#<FOO @ #x1995d80> :BAR BAZ)) 2: ... I am going to keep looking into it, but I'd appreciate some more eyeballs if anyone has the time... -Doug |
From: <as...@ma...> - 2003-11-25 23:54:02
|
On 25 Nov 2003, Doug McNaught wrote: > (defmethod initialize-instance :after ((f foo) &key &allow-other-keys) ~~~~~~~~~~~~~~~~~~~~~~ Are you sure this is what you want? Andras |
From: Doug M. <do...@mc...> - 2003-11-26 00:36:27
|
=?X-UNKNOWN?Q?Andr=E1s_Simon?= <as...@ma...> writes: > On 25 Nov 2003, Doug McNaught wrote: > > > (defmethod initialize-instance :after ((f foo) &key &allow-other-keys) > ~~~~~~~~~~~~~~~~~~~~~~ > Are you sure this is what you want? Umm... Well... It complains if I leave it off. ;) I admit I actually don't quite understand how it interacts with everything else. But feeding the same code to SBCL works, so I figured it was a bug... I have been trying to grok CLOS from the spec but it is heavy going. :) -Doug |
From: <as...@ma...> - 2003-11-26 08:23:28
|
On 25 Nov 2003, Doug McNaught wrote: > =?X-UNKNOWN?Q?Andr=E1s_Simon?= <as...@ma...> writes: > > > On 25 Nov 2003, Doug McNaught wrote: > > > > > (defmethod initialize-instance :after ((f foo) &key &allow-other-keys) > > ~~~~~~~~~~~~~~~~~~~~~~ > > Are you sure this is what you want? > > Umm... Well... It complains if I leave it off. ;) I admit I > actually don't quite understand how it interacts with everything > else. But feeding the same code to SBCL works, so I figured it was a > bug... I'm not very good at reading BNF, but 3.4.1 (and the expectation that one should be able to suppress keyword arg checking without having to use keyword args) gives me the impression that you're right, it should work. > > I have been trying to grok CLOS from the spec but it is heavy going. :) I think it's not necessarily a CLOS issue; the bug (if it is one) can be reproduced with (defun test (x &key &allow-other-keys) (format t "Did something!")) Andras |
From: Peter G. <pe...@ar...> - 2003-11-27 04:39:46
|
On Wed, 26 Nov 2003 at 10:22:15 +0100, Andr=E1s_Simon wrote: > I think it's not necessarily a CLOS issue; the bug (if it is one) can > be reproduced with > > (defun test (x &key &allow-other-keys) (format t "Did something!")) This should now be fixed in CVS, for both CLOS and non-CLOS cases. (It was a non-CLOS bug in Closure.java.) -Peter |
From: Doug M. <do...@mc...> - 2003-11-26 01:45:17
|
=?X-UNKNOWN?Q?Andr=E1s_Simon?= <as...@ma...> writes: > On 25 Nov 2003, Doug McNaught wrote: > > > (defmethod initialize-instance :after ((f foo) &key &allow-other-keys) > ~~~~~~~~~~~~~~~~~~~~~~ > Are you sure this is what you want? OK, after a little more head-scratching over the spec and looking at some examples, I tried (defmethod initialize-instance :after ((f foo) &rest init-options &key) ...) which works fine. I am not competent to determine whether my original tets case is a bug or not, but at least I can move forward with my code now. So thanks very much for the hint. :) -Doug |