We wrapped defrecord in a macro that created a factory function then
had print-dup print a call to that function.

https://github.com/david-mcneil/defrecord2

You can also find pprint in there too.


On Jan 31, 11:26 am, Seth <wbu...@gmail.com> wrote:
> This is my attempt:
>
> (defn record? [a]
>   (and (map? a) (not (instance? clojure.lang.APersistentMap a))))
>
> (defmethod print-dup clojure.lang.IPersistentMap [m, ^Writer w]
>   (if (record? m)
>     (do (.write w "#=(")
>         (print-dup (class m) w) (.write w ". ")
>         (doall (map #(do (print-dup % w) (.write w " ")) (map second (seq
> m))))
>         (.write w ")")
>         )
>     (do
>       (#'clojure.core/print-meta m w)
>       (.write w "#=(")
>       (.write w (.getName (class m)))
>       (.write w "/create ")
>       (#'clojure.core/print-map m print-dup w)
>       (.write w ")"))))
>
> ;;used 
> fromhttp://groups.google.com/group/clojure/browse_thread/thread/cb5246d07...
> (defn frm-save
>  "Save a clojure form to file."
>   [file form]
>   (with-open [w (java.io.FileWriter.
>                  (if (instance? File file) file (File. file)))]
>     (binding [*out* w *print-dup* true] (prn form))))
>
> (defn frm-load
>   "Load a clojure form from file."
>   [file]
>   (with-open [r (java.io.PushbackReader.
>      (java.io.FileReader. (if (instance? File file) file (File.
> file))))]
>      (let [rec (read r)]
>        rec)))
>
> However, it appears that the reader cant read classes
> For example
>
> (defrecord Foo [a])
> (frm-save "/home/seth/Desktop/test" (Foo. 2))
> (frm-load "/home/seth/Desktop/test")
>
> Another problem is that it saves it as the ns it is in, for example my-
> ns.Foo, and when you reload it it wont find my-ns.Foo unless you have
> required it. But, editing the test file to just output
>
> #=(#=foo. 2 3 )
>
> and then loading that throws a class not found exception.
>
> Any general way to print-dup these records?

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