Hello, I am relatively new to clojure and lispy languages in general. I wrote a small program that manipulated thread vars using the binding macro and I am seeing what seems to be strange behavior.
To illustrate, here is another small program that reproduces what I am seeing (without all the distraction of the original). There is a reason for the nested bindings in the original code where it seems a bit contrived here. Regardless, if it is something I am doing wrong, please let me know. ------------ (declare x y) (def rnd1 (java.util.Random.)) (def rnd2 (java.util.Random.)) (defn throw-random-exception [c] (let [value (.nextInt rnd1 100)] (if (= value 50) (throw (Exception. (str "Random Exception after count = " c)))))) (defn change-value-of-thread-local-var [] (set! x (conj x (.nextInt rnd2 100)))) (defn test-binding [] (binding [x [0 1 2 3 4 5 6]] (try (loop [c 0] (do (change-value-of-thread-local-var) (throw-random-exception c)) (recur (inc c))) (catch Exception e (println (str x "\n" (.getMessage e))))))) (defn test-nested-binding [] (binding [x [0 1 2 3 4 5 6]] (try (loop [c 0] (binding [y [7 8 9]] (do (change-value-of-thread-local-var) (throw-random-exception c)) (recur (inc c)))) (catch Exception e (println (str x "\n" (.getMessage e))))))) ------------ If I load this as a file at the REPL and then run "(test-binding)" the value of x is unbound when the function returns. However if you run "(test-nested-binding)" then the value of BOTH x and y have a bound value when the function returns. Is this a bug? If so, where do I report it? If not, what am I doing wrong? I have also moved the binding of x inside the "try" and it has the same behavior. thanks, take care, Mike -- 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