Matt Brown wrote:

> Why does (. System getProperty "java.version") work when
> (. (identity System) getProperty "java.version") does not work, given
> that
> (identity System) should be the same as System ?

It's because the . special form treats class names specially.  In Java 
there's unfortunately a difference between instances of the 
java.lang.Class object and the class itself.  So:

Clojure: (. System getProperty "java.version")
Java: System.getProperty("java.version");

While:

Clojure: (. (identity System) getProperty "java.version") ; error!
Java: System.class.getProperty("java.version"); // error!

But if you call a method that exists on a java.lang.Class object it's okay:

(. (identity System) getMethods)

It's preferred style in Clojure to use this form to access static 
methods and fields as it prevents this sort of confusion:

   (System/getProperty "java.version")

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