Well, this is just an example.
I need to refer to global vars from eval.
One solution is to define these vars in eval form,
but I would like to omit that step.
On 31 Maj, 12:53, Joost <jo...@zeekat.nl> wrote:
> 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