Eval expects to get symbols that are resolvable in the current namespace, so that won't work (as you mention). However, in this case it is pretty easy to work around. You just need to embed the values of a and b into the code that is evaluated, and since they are primitives this should work. I'd do this like `(+ ~a ~b). The ` is called "syntax-quote" (you can google for that, not that you shouldn't ask questions if something is unclear :) ). Basically you'll get code like (clojure.core/+ 10 20) that way; the tilde "~" puts the local values of a and b in the code block rather than the symbols a and b.
On Tuesday, September 6, 2016 at 10:41:49 AM UTC+1, Philos Kim wrote: > > I need to evaluate local symbols using eval function in Clojure. > > (def a 1) > (def b 2) > > (let [a 10 > b 20] > (eval '(+ a b))) > ;=> 3 > > I expected the result to be 30, but the result is 3. I want to know why > Clojure eval function doesn't evaluate the local symbols. > > And any alternative to get around? > -- 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/d/optout.