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