From: Christophe R. <cs...@ca...> - 2004-09-17 07:15:38
|
Alexey Dejneka <ade...@co...> writes: >> (defmethod make-instance :around ((instance (eql 'CONTEXT)) &rest rest >> &key name &allow-other-keys) > > AMOP, section "Restrictions on Portable Programs": > > AMOP> Any method defined by a portable program on a specified generic > AMOP> function must have at least one specializer that is neither a > AMOP> specified class nor an eql specializer whose associated value is > AMOP> an instance of a specified class. > > So, it seems that you need to create your own metaclass, make CONTEXT > be an instance of it and specialize MAKE-INSTANCE on (FIND-CLASS > 'CONTEXT). In addition to this, the specified behaviour of MAKE-INSTANCE is to "create and return a new instance of the given class" (accoring to ANSI); "The result is a newly allocated and initialized instance of class" (says AMOP): defining methods which violate this contract, even if not explicitly forbidden anywhere, is generally a bad idea. Defining an ENSURE-CONTEXT function is probably the way forward. Cheers, Christophe |