I need to correct that p2 and m1 should not have parens around
them.... sorry about that.  Seemed obvious when I read it again this
morning.

The literal reader forms are even trickier in how they treat embedded
expressions.  They seem to preserve (and not evaluate) the quoted
forms?

user=> (def p #user.Person[(str "a" "b") "c"])
#'user/p
user=> p
#user.Person{:first (str "a" "b"), :last "c"}    ;; note the embedded
str here, not "ab"
user=> (:first p)
(str "a" "b")           ;; aroo?

Surely, this is not the intended behavior?


On Oct 25, 8:53 pm, Alex Miller <a...@puredanger.com> wrote:
> So I'm catching up with the 1.3 defrecord additions (best docs here
> afaik:http://dev.clojure.org/display/design/defrecord+improvements-
> willhttp://clojure.org/datatypesbe updated?)
>
> In 1.2, records were constructed only with the positional Java
> constructor:
>   (defrecord Person [first last])
>   (Person. "alex" "miller")
>
> In 1.3, there are now a plethora of new construction options:
> Positional:
> p1)  (Person. "alex" "miller")           ;; "legacy" Java constructor
> form
> p2)  (#user.Person["alex" "miller"])   ;; reader form, ns required
> p3)  (->Person "alex" "miller")          ;; factory function
>
> Map:
> m1)  (#user.Person{:first "alex" :last "miller"})   ;; reader form, ns
> required, default print form
> m2)  (map->Person {:first "alex" :last "miller"})  ;; factory function
> m3)  (Person/create {:first "alex" :last "miller"})  ;; static class
> factory method
>
> So my question is what my first choice should be when constructing
> records and needing positional or map forms?  Re positional forms, the
> p2 reader form requires the ns so is probably more typing than I'm
> likely to do.  I'm guessing that p3 is now preferred over p1 as it
> hides the interop form.  So I'll take p3 as the preferred first
> choice.
>
> For maps, m1 is the default form serialization form but requires the
> ns, so I doubt I would choose that first.  m3 clearly seems designed
> for tool usage and does Java interop, so I'm guessing m2 is the likely
> preferred first choice.
>
> Thoughts?

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