Actually, the for didn't work for me either but I believe that was a
lazy evaluation issue. The doseq seems to use internal recursion,
which breaks the try/finally. My final solution was to build up doseq
functionality with reduce. See below:

(defn foo1 []
  (try
   (println "body")
   (finally
    (doseq [x (range 3)] (println x)))))

(defn foo2 []
  (try
   (println "body")
   (finally
    (for [x (range 3)] (println x)))))

(defn foo3 []
  (try
   (println "body")
   (finally
    (reduce (fn [y x] (println x)) () (range 3)))))

- The foo1 definition can't be evaluated b/c of
java.lang.UnsupportedOperationException: Cannot recur from catch/
finally

user=> (foo2)
body
nil

user=> (foo3)
body
0
1
2
nil

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