3
REPL에서 다음을 평가할 때 얻은 결과에 대한 자세한 설명이 있습니까?Java in Clojure, 평가 질문
(.PI Math)
는
(. Math PI)
가
3.141592653589793
REPL에서 다음을 평가할 때 얻은 결과에 대한 자세한 설명이 있습니까?Java in Clojure, 평가 질문
(.PI Math)
는
(. Math PI)
가
3.141592653589793
설명을 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