Thanks Anders. I'm not sure why, but it appears that read does not support structmaps. The following works with a hashmap:
(import '(java.io StringReader PushbackReader)) (def y (hash-map :a "a" :b "b")) (defn serialize [x] (binding [*print-dup* true] (pr-str x))) (defn deserialize [x] (let [r (new PushbackReader (new StringReader x))] (read r))) (deserialize (serialize y)) On Jan 26, 3:15 am, Anders Rune Jensen <anders.rune.jen...@gmail.com> wrote: > Hello > > I'm using: > > (defstruct db > :file > :data) > > (defn write-db [db] > (let [path (str (:file db) ".tmp")] > (binding [*out* (java.io.FileWriter. path)] > (prn (:data db))) > (. (new File path) renameTo (new File (:file db))))) > > (defn read-db [fname] > (try > (let [object (read-string (slurp fname))] > (struct db fname object)) > (catch Exception e > (println (format "Caught exception when reading file %s:\n%s" fname > e))))) > > When writing it first writes to a temporary file and then renames so > that if the power cuts in the middle that you won't be left with a > half file :) > > > > > > On Tue, Jan 26, 2010 at 7:22 AM, jleehurt <jleeh...@gmail.com> wrote: > > Hi all, > > > I am writing a distributed program using Clojure. I am trying to write > > some code to pass structs around to different nodes on the network by > > serializing and deserializing strings. I do not fully understand how > > to use *print-dup* and read to do this. > > > The last line of the following gives the error > > "java.lang.IllegalArgumentException: No matching method found: create > > (NO_SOURCE_FILE:0)" when I run it in the REPL: > > > (import > > '(java.io StringReader PushbackReader)) > > > (defstruct Y :a :b) > > (def y (struct Y "a" "b")) > > > (defn serialize [x] > > (binding [*print-dup* true] (pr-str x))) > > > (defn deserialize [x] > > (let [r (new PushbackReader (new StringReader x))] > > (read r))) > > > (deserialize (serialize y)) > > > What am I doing wrong here? > > > -- > > 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 > > -- > Anders Rune Jensen > > http://www.iola.dk -- 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