On Tue, Dec 15, 2009 at 1:11 PM, Richard Newman <holyg...@gmail.com> wrote: >> Isn't the whole point of a struct that it guarantees that certain keys >> are present? > > Oh, I agree -- dissoc on a struct-map would return a non-struct-map. > I'm not suggesting that struct-maps should be able to be dissociated > from one of their keys, I'm wondering whether it's better to return an > array-map or hash-map from dissoc rather than blow up. > > (Or whether there should be a `without-keys` function that behaves > much like dissoc but works on any map, and have rename-keys and other > "implicit dissoc" functions use that instead. rename-keys on a struct- > map's core keys implies an abandonment of struct-ness, no?) > > I suppose the question is "are struct-maps 'structs' or > maps?" (speaking ontologically). If they're structs, then it's happy > coincidence that the map get/assoc functions work on them, and > slightly confusing that they print as ordinary maps. If they're maps, > where their struct-ness is an optimization, then dissoc should work in > the same way that assoc on an array-map can sometimes return a hash-map. > > The main reason I bring this up is that I had no reason to suspect > that the maps returned from my SQL queries were actually struct-maps. > They printed like any other map, and work correctly for every non- > removing map operation. Having some subset of maps error on core API > operations seems opposed to abstraction-oriented programming. It trips > my disgust switch to see code like > > (rename-keys > (if (struct-map? m) > (into {} m) > m) > {:foo :bar}) >
Yes. The behavior for the new deftypes, when used as maps, is as you desire - a dissoc of a field key yields an ordinary map (no longer of the deftype type). Enhancements to structs are on hold pending analysis of their utility in light of deftypes. Rich -- 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