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.

Reply via email to