2009/5/4 Christophe Grand <christo...@cgrand.net>

>
> Janico Greifenberg a écrit :
> > Hi,
> >
> > I encountered unexpected behavior of the 'if' form in clojure when using
> > instances of java.lang.Boolean as the condition. I wanted to convert
> > input strings to booleans and used the constructor of the Boolean class
> > with the string parameter. However, when I pass these values as a
> > condition to if, the true-branch always gets executed. For example:
> >
> >  > (if (Boolean. "true") 1 2)
> > 1
> >  > (if (Boolean. "false") 1 2)
> > 1
> >
> > It seems to me that this has to do with the identity of the objects, as
> > (Boolean. "false") is not identical (although equal) to the clojure
> > literal false. Is this behavior intentional or a bug?
> >
> > The problem does not occur when I use Boolean/parseBoolean which returns
> > a lower case boolean.
> >
>
> It's intentional, Rich said "for efficiency only canonic false is
> logical false in
> Clojure." in http://groups.google.com/group/clojure/msg/81ba3175da9a877c
>
> Workaround:
>  > (if (boolean (Boolean. "false")) 1 2)
> 2
>


At the cost of a lesser experience concerning java interoperability, then ?

Isn't that "premature optimization" ? ;-)

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