:initform vs. :default-initargs

Martin Simmons martin at lispworks.com
Wed Dec 22 15:39:53 UTC 2021


Yes, this works as expected for me:

(defclass foosys (asdf/system:system)
  ()
  (:default-initargs :default-component-class 'foo))

(asdf/component:module-default-component-class (make-instance 'foosys)) => foo

-- 
Martin Simmons
LispWorks Ltd
http://www.lispworks.com/



>>>>> On Wed, 22 Dec 2021 08:46:02 -0600, Robert P Goldman said:
> 
> I don’t fully understand the issue. I followed up the reference you posted, and the follow-on reference to Chris Riesbeck’s web page, and there I see the following:  
> 
> 
> make-instance (in conjunction with initialize-instance) creates an instance of a circle as follows:
> 
> make-instance creates an empty instance.  
> make-instance passes the instance and the other arguments to initialize-instance.  
> initialize-instance first uses any explicit initargs that you gave to make-instance.
> For slots still unitialized, it then uses any default initargs that have been defined.
> Finally, for slots still unitialized, it uses any default initforms that have been defined.
> 
> 
> So one difference is that default initargs take priority over initforms.
> 
> 
> ———-
> 
> This suggests that your default initargs (Apple tried to make that “unitards”!) should, in fact, shadow the initforms.
> 
> This seems to be consistent with what is in the spec here http://www.lispworks.com/documentation/HyperSpec/Body/07_a.htm  
> 
> I’ll have to look at the actual code (not at my desk rn) to see what’s going on, but it does not seem to be an issue with default initargs vs. initforms  
> 
> If anyone else beats me to it, that would be great.  
> 
> 
> --  
> Robert P. Goldman  
> 
> On December 22, 2021 at 05:18:58, Attila Lendvai (attila at lendvai.name(mailto:attila at lendvai.name)) wrote:
> 
> > dear list,
> >  
> > i wanted to set the default-component-class of our own system subclass using :default-initargs, but it's ignored because the slot has a :initform (as opposed to setting the default value using a :default-initargs entry).
> >  
> > in the current ASDF setup, i need to override the slot (or the accessor method), which involves messing with internal symbols.
> >  
> > if ASDF used :default-initargs then i could just override that using a :default-initargs entry on my own subclass (IIUC).
> >  
> > https://lisptips.com/post/11728375873/initform-and-default-initargs
> >  
> > i'm sending it for your consideration, it's not a pressing issue on my side.
> >  
> > - attila
> > PGP: 5D5F 45C7 DFCD 0A39
> >  
> 



More information about the asdf-devel mailing list