Weird indeed:

user=> (def a (atom 1))
#'user/a
user=> (try (prn :test) (finally (swap! a inc) (.foo nil)))
:test
java.lang.NullPointerException (NO_SOURCE_FILE:0)
user=> @a
3

I would have expected 2 as a result, in any case ?

2010/8/10 Meikel Brandmeyer <m...@kotka.de>

> Hi,
>
> On Aug 10, 8:36 am, Brian Stiles <brian.sti...@gmail.com> wrote:
>
> > The following succeeds:
> >
> > (try
> >   (prn 1)
> >   (finally
> >    (prn 2)
> >    (doto (System/out) (.print "-") (.println "-"))))
> >
> > prints:
> >
> > 1
> > 2
> > --
> >
> > The following fails (note the odd duplication of "2" in the output):
> >
> > (try
> >   (prn 1)
> >   (finally
> >    (prn 2)
> >    (.. (System/out) (print "-") (println "-"))))
> >
> > prints:
> >
> > 1
> > 2
> > -2
> > -Exception in thread "main" java.lang.NullPointerException
>
> Of course it fails, because print is a void method and hence "returns"
> nil. So you are calling print on nil leading to the NPE.
>
> Why the 2 is printed twice... good question:
>
> user=> (try (prn 1) (finally (prn 2) (.foo nil)))
> 1
> 2
> 2
> java.lang.NullPointerException (NO_SOURCE_FILE:0)
> user=> (let [] (try (prn 1) (finally (prn 2) (.foo nil))))
> 1
> 2
> 2
> java.lang.NullPointerException (NO_SOURCE_FILE:0)
> user=> (let [a (atom 2)] (try (prn 1) (finally (prn @a) (.foo nil))))
> 1
> 2
> java.lang.NullPointerException (NO_SOURCE_FILE:0)
> user=> (def a (atom 2))
> #'user/a
> user=> (try (prn 1) (finally (prn @a) (.foo nil)))
> 1
> 2
> 2
> java.lang.NullPointerException (NO_SOURCE_FILE:0)
>
> Sincerely
> Meikel
>
> --
> 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<clojure%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
>

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