I understand what's going on here (and I don't regard it as a bug that  
needs fixing) but I thought I'd share something that caught me off- 
guard, and perhaps should be mentioned in the docs for struct-maps.

Clojure 1.0.0-
user=> (defstruct foo :bar :baz)
#'user/foo
user=> (def foo-bar (accessor foo :bar))
#'user/foo-bar
user=> (= (struct foo 1 2) (eval (struct foo 1 2)))
true
user=> (foo-bar (struct foo 1 2))
1
user=> (foo-bar (eval (struct foo 1 2)))
java.lang.ClassCastException: clojure.lang.PersistentArrayMap cannot  
be cast to clojure.lang.PersistentStructMap (NO_SOURCE_FILE:0)


i.e., struct-map-ness does not persist through evaluation.

Client code must either avoid accessors for data that might be  
evaluated, or post-process the result of calling eval. I have a  
defstruct* macro that defines a structure and its accessors, so it's  
straightforward for me to also define a map->foo function that  
rebuilds the struct from the resultant map.

-R

--~--~---------~--~----~------------~-------~--~----~
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