On Mon, Oct 19, 2009 at 12:39 AM, Gorsal <s...@tewebs.com> wrote:
>
> So now that the future is working, I'm attempting to print from an
> actual java thread. Like this
>
> (defmacro with-thread [nm & body]
>  `(let [thread# (Thread. #(fn [] (do ~...@body)))]
>     ~@(if nm `((.setName thread# ~nm)))
>     (.start thread#)
>     thread#))
>
> (with-thread nil (println "HasdfasdfasdfasdfasdfasdfasdfasdfI"))
>
> Except no output! Eeek!!! What am i doing wrong?


Get rid of the extra #:

(defmacro with-thread [nm & body]
 `(let [thread# (Thread. (fn [] (do ~...@body)))]
    ~@(if nm `((.setName thread# ~nm)))
    (.start thread#)
    thread#))

#(fn [] foo) is equivalent to (fn [] (fn [] foo)), i.e. is a zero-argument
function that returns a zero argument function. So your thread's Runnable
had no side effects and the return value (which, if invoked, WOULD have had
side effects) was discarded and never invoked.

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