it was on 1.2.0-master but I will upgrade to 1.3.0-master thanks! :-)
On Sep 13, 3:01 am, Chouser <chou...@gmail.com> wrote: > On Sun, Sep 12, 2010 at 3:58 PM, doc <mdpendergr...@gmail.com> wrote: > > 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. > > For me, x and y are unbound after running either function on a recent > master branch of Clojure. What version of Clojure are you using? > > user=> (clojure-version) > "1.3.0-master-SNAPSHOT" > > If you're using something earlier than the 1.2 release, I'd suggest > you upgrade to 1.2 and try again. > > --Chouserhttp://joyofclojure.com/ -- 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