That's much simpler indeed, but it doesn't give the key-value pairs,
just the values.

On Oct 18, 10:15 pm, Alan Malloy <[email protected]> wrote:
> Simpler to just use the field names which are already bound, rather
> than constructing keywords out of them and calling them with juxt:
>
> (defmacro defrecord-withstr [name fields columns include?]
>   (let [displayed (if include? columns (remove (set columns) fields))]
>     `(defrecord ~name ~fields
>        Object
>        (toString [_#]
>          (clojure.string/join " " [~@displayed])))))
>
> On Oct 18, 9:25 am, "Marshall T. Vandegrift" <[email protected]>
> wrote:
>
>
>
>
>
>
>
> > Dusan <[email protected]> writes:
> > > (symbol(str "(str (:" % " " vv "))"))
>
> > This expression is the (immediate) problem child.  You are producing a
> > symbol which contains literal space and parenthesis characters embedded
> > in it.  When you print out the macro-expansion, it looks fine, but the
> > actual forms generated contain that weird symbol instead of the expected
> > list structure.
>
> > You do have other problems though --
>
> >   - A symbol prefixed with a colon is just a symbol prefixed with a
> >     colon, not a keyword.   You need to use the `keyword' function to
> >     create a keyword from a symbol or string.
>
> >   - Instead of calling `gensym' directly, it's probably easier to just
> >     use autogensyms in this sort of situation.
>
> > For fun, here's a (hopefully) more idiomatic version:
>
> > (defmacro defrecord-withstr [name fields columns include?]
> >   (let [displayed (->> (if include? columns (remove (set columns) fields))
> >                        (map keyword))]
> >     `(defrecord ~name ~fields
> >        Object
> >        (toString [this#]
> >          (str/join " " ((juxt ~@displayed) this#))))))
>
> > -Marshall

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to