On May 31, 12:03 pm, Michael Jaaka <michael.ja...@googlemail.com>
wrote:
> Hello,
>
> I would like to make that eval see context of the caller block.
> In the example:
>
> (defn my-if [a b c]
>         (let [z (name (gensym)) t (symbol (str z "true")) f (symbol (str z
> "false")) ]
>                 (def t (fn[] b))
>                 (def f (fn[] c))
>                 (def mycond (boolean a))
>                 ((eval (symbol (str z mycond))))))
>
> the symbol can't be found in context represented by the eval. What to
> do to make it working?

Practically all of the time you need to solve this kind of problem,
you can use a map with symbol -> value pairs instead of adding bunch
of  variable definitions to the environment. And it usually turns out
once you do this you don't even need to (eval) anything anymore.

You also *really* do not want to redefine globals in a function body
if you have any pretense of doing functional code. Why don't you use
(let []) instead?

Joost.

-- 
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

Reply via email to