This actually seems to work for deftypes too: user=> (deftype Foo []) user.Foo user=> (eval (Foo.)) #<Foo user.Foo@4450c45f> user=> (eval [(Foo.)]) [#<Foo user.Foo@71c76cf5>]
But not for arbitrary objects: user=> (eval (java.io.StringReader. "foo")) #<StringReader java.io.StringReader@7e5ef8e8> user=> (eval [(java.io.StringReader. "foo")]) CompilerException java.lang.RuntimeException: Can't embed object in code, maybe print-dup not defined: java.io.StringReader@7504a5ce, compiling:(NO_SOURCE_PATH:1:1) So I guess Fn and Var have print-dup methods defined. I still don't understand why print-dup is used at all though. On 8 August 2013 15:44, Jamie Brandon <ja...@scattered-thoughts.net> wrote: > What if it isn't inside a constant? > > user=> (eval `(fn [] ~#'x)) > #<user$eval1366$fn__1367 user$eval1366$fn__1367@15dbb76> > > user=> (with-local-vars [x nil] (eval `(fn [] ~x))) > CompilerException java.lang.NullPointerException, > compiling:(NO_SOURCE_PATH:1:1) > > How about functions? These are unreadable but they still eval > correctly inside constants. > > user=> (letfn [(x [] nil)] (eval x)) > #<user$eval1377$x__1378 user$eval1377$x__1378@5fea6729> > > user=> (letfn [(x [] nil)] (eval [x])) > [#<user$eval1381$x__1382 user$eval1381$x__1382@e3b7c27>] > > user=> (read-string "#<user$x user$x@1981e4d>") > RuntimeException Unreadable form clojure.lang.Util.runtimeException > (Util.java:219) > > user=> (defn x [] nil) > #'user/x > > user=> (eval x) > #<user$x user$x@14ff1714> > > user=> (eval [x]) > [#<user$x user$x@5892d4a8>] > > user=> (read-string "#<user$eval1381$x__1382 user$eval1381$x__1382@e3b7c27>") > RuntimeException Unreadable form clojure.lang.Util.runtimeException > (Util.java:219) > > On 8 August 2013 14:58, Christophe Grand <christo...@cgrand.net> wrote: >> The error is caused by the fact that eval sees the var as a constant (or >> part of) and tries to serialize the constant. >> #<Var: --unnamed--> is unreadable while #'user/x is that explains teh >> difference in behaviour. >> >> >> On Thu, Aug 8, 2013 at 3:40 PM, Jamie Brandon <ja...@scattered-thoughts.net> >> wrote: >>> >>> This has me stumped: >>> >>> user=> (with-local-vars [x nil] (eval x)) >>> #<Var: --unnamed--> >>> user=> (with-local-vars [x nil] (eval [x])) >>> CompilerException java.lang.NullPointerException, >>> compiling:(NO_SOURCE_PATH:1:1) >>> >>> By comparison: >>> >>> user=> (def x nil) >>> #'user/x >>> user=> (eval #'x) >>> #'user/x >>> user=> (eval [#'x]) >>> [#'user/x] >>> >>> -- >>> -- >>> 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 >>> --- >>> You received this message because you are subscribed to the Google Groups >>> "Clojure" group. >>> To unsubscribe from this group and stop receiving emails from it, send an >>> email to clojure+unsubscr...@googlegroups.com. >>> For more options, visit https://groups.google.com/groups/opt_out. >>> >>> >> >> >> >> -- >> On Clojure http://clj-me.cgrand.net/ >> Clojure Programming http://clojurebook.com >> Training, Consulting & Contracting http://lambdanext.eu/ >> >> -- >> -- >> 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 >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/groups/opt_out. -- -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.