clojure structs are an optimized version of maps for a set of shared
keys. if you don't have a defined set of shared keys you just have a
map. so by all means, use a map

On Tue, Jan 19, 2010 at 3:52 PM, Andreas Wenger
<andi.xeno...@googlemail.com> wrote:
> Hi,
>
> I would like to know why defstruct without providing any keys (like
> "(defstruct s)") is not allowed (exception: "Must supply keys").
>
> Let me shortly describe why I think that this would be useful: Imagine
> you have a defstruct like in Rich's Ants demo:
>
> (defstruct cell :food :pher) ;may also have :ant and :home
>
> :ant and :home are optional, since they are not often used (Rich
> actually states in his talk, that this is an advantage compared to
> Java where we would always have to store "null" for each of the
> optional class members). Image, you use (struct-map cell ...) very
> often in your program. Now, you notice that :food and :pher are also
> not used very often, and that most times only one or two of the four
> possible keys are actually used. So you make them all optional:
>
> (defstruct cell) ;may have :food, :pher, :ant and :home
>
> This is not allowed. You have to remove the whole defstruct, which
> makes all your (struct-map cell ...) calls useless. This is bad,
> because you have to replace it everywhere and struct-map has a very
> nice documentary style you want to use anyway. (Later, when we notice
> that at least one key is obligatory, we again have to find these
> places and convert them back to struct-map...)
>
> In practice, I had this problem with a struct containing 10 possible
> keys, where mostly only 1-2 are used in practice. Now I have to remove
> the whole defstruct... or let at least one arbitrary key be non-
> optional, which is more a hack than a nice solution.
>
> Looking in the PersistentStructMap.java, I found out that allowing
> structs with no obligatory key would be no problem at all (change 2
> lines?). I don't know why it was written that way, but I think here
> Clojure puts a spoke in me wheel where it just not needed.
>
> Any comments? Thanks!
>
>
> Andi
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
>



-- 
And what is good, Phaedrus,
And what is not good—
Need we ask anyone to tell us these things?
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to