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