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