[racket] dynamically auto-initialized private struct fields

From: David T. Pierson (dtp at mindstory.com)
Date: Tue Nov 12 07:30:01 EST 2013

On Sun, Nov 10, 2013 at 12:36:13PM -0500, Matthias Felleisen wrote:
> 
> Have you considered classes instead of structs? -- Matthias

Matthias,

Thanks for the response.

Classes did cross my mind, but in the particular use case I'm working on
now, they feel a little too heavy.  Perhaps that is a relative lack of
familiarity on my part...

(As a side question, are there any particular collections for use
outside gui apps which utilize classes in a way you find exemplary?)

Also, I want to utilize #:property prop:evt.  In fact I had wanted to
rely on this alone and not require a new struct type, but then I
realized I need to attach some private data to each instance.

There were 3 aspects of my original post in this thread:

- enumerate the different struct-based solutions I had considered and
  why they were slightly less than ideal

- determine whether I was missing an alternative solution within structs

- suggest a potentially useful new feature

Based on your response and the lack of other responses, I'm assuming
there is no other solution built-in to structs.

I could write a macro that allows users of my module to define their
subtypes of my type and get a constructor that initializes the private
value without exposing it.

Looking through the racket repository, I don't see any struct types that
use both #:auto and #:guard.  Maybe no one else has ever hit this.

I was hoping someone would comment on the new feature idea (something
like #:guard that can provide values for #:auto fields.)  Maybe its a
bad idea on its face, or maybe it would have been a good idea only if it
had been suggested when structs were originally introduced.

I'm not asking anyone to implement such a feature.  If there was
consensus that it could be a good feature and a way to make it not
break existing code, I'd be willing to try to implement it.

David

Posted on the users mailing list.