wow!!! i wasn't expecting that one...

Jim

On 13/04/12 21:17, Armando Blancas wrote:
It's the other way around: false is boxed into Boolean/FALSE. Here's the if stmt:

public Object eval() {
Object t = testExpr.eval();
if(t != null && t != Boolean.FALSE)
return thenExpr.eval();
return elseExpr.eval();
}

On Friday, April 13, 2012 12:45:02 PM UTC-7, Andy Fingerhut wrote:

    One little nit that confuses me.

    Boolean/FALSE is documented as being of type Boolean in Java
    documentation, yet it is treated by Clojure the same as primitive
    boolean false:

    user=> (clojure-version)
    "1.3.0"
    user=> (if Boolean/FALSE "logical true" "logical false")
    "logical false"
    user=> (identical? Boolean/FALSE false)
    true

    Does anyone know why?

    Thanks,
    Andy


    On Fri, Apr 13, 2012 at 11:41 AM, Sean Corfield
    <seancorfi...@gmail.com <mailto:seancorfi...@gmail.com>> wrote:

        On Fri, Apr 13, 2012 at 3:33 AM, Vinzent <ru.vinz...@gmail.com
        <mailto:ru.vinz...@gmail.com>> wrote:
        > Just like Boolean's javadoc puts a strong
        > emphasis on the fact that public Boolean(boolean value)
        constructor usually
        > shouldn't be used, clojure's docstring should say that (= x
        false) may give
        > you a result which will confuse you, so you'd better use
        'false?' instead.

        (def f (Boolean. false))
        (false? f)
        ;; => false
        (true? f)
        ;; => false
        (= f false)
        ;; => true
        (if f :t :f)
        ;; => :t

        So 'false?' doesn't help you here.

        No one should be using (Boolean. false) in Clojure code - we
        have true
        / false. Why create a Java object whose documentation says not
        to do
        it?

        So if anyone runs into this problem _in real world code_ it's
        because
        they are calling a Java API that somehow returns a Java
        Boolean object
        embedded in the result. If you are working with a Java data
        structure
        full of _Objects_ then you need to take care of converting those
        Object instances into appropriate Clojure values. Calling
        (boolean v)
        is sufficient to convert the Java Object to a Clojure true/false
        value.
        --
        Sean A Corfield -- (904) 302-SEAN
        An Architect's View -- http://corfield.org/
        World Singles, LLC. -- http://worldsingles.com/

        "Perfection is the enemy of the good."
        -- Gustave Flaubert, French realist novelist (1821-1880)

        --
        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
        <mailto: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
        <mailto:clojure%2bunsubscr...@googlegroups.com>
        For more options, visit this group at
        http://groups.google.com/group/clojure?hl=en
        <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

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