2010-02-15 2 views

답변

12

설명을 http://clojure.org/java_interop에서 평가되는

IllegalArgument Exception 

동안 제공한다.

user> (macroexpand '(.PI Math)) 
(. (clojure.core/identity Math) PI) 

(identity Math)Math 클래스를 나타내는 Class 개체를 반환합니다. 이 Class 개체에서 PI이라는 인스턴스 멤버에 액세스하려고 시도했지만 존재하지 않습니다. 이것은 Math 클래스의 PI이라는 정적 멤버에 액세스하는 것과는 다릅니다.이 Class 객체를 리플렉션에 사용하거나 클래스를 다른 메소드로 객체 또는 이러한 종류의 객체를 전달하는 경우에만 사용합니다.

user> (class (identity Math)) 
java.lang.Class 
user> (.getName (identity Math)) 
"java.lang.Math" 
user> (.getName Math) 
"java.lang.Math" 
user> (.getMethods Math) 
#<Method[] [Ljava.lang.reflect.Method;@12344e8> 
user> (vec (.getMethods Math)) 
[#<Method public static int java.lang.Math.abs(int)> #<Method public static long java.lang.Math.abs(long)> #<Method public static float java.lang.Math.abs(float)> ...] 
user> (.getField Math "PI") 
#<Field public static final double java.lang.Math.PI> 
user> (.getDouble (.getField Math "PI") Math) 
3.141592653589793 

원하는 작업을 수행하는 가장 짧은 방법은 아마도 Math/PI입니다.

user> (macroexpand '(Math/PI)) 
(. Math PI) 
user> Math/PI 
3.141592653589793 
user> (. Math PI) 
3.141592653589793