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