是否有关于评估以下REPL的结果的详细解释.
(.PI Math)
Run Code Online (Sandbox Code Playgroud)
给
IllegalArgument Exception
Run Code Online (Sandbox Code Playgroud)
而
(. Math PI)
Run Code Online (Sandbox Code Playgroud)
评估为
3.141592653589793
Run Code Online (Sandbox Code Playgroud)
Bri*_*per 12
解释在http://clojure.org/java_interop.
user> (macroexpand '(.PI Math))
(. (clojure.core/identity Math) PI)
Run Code Online (Sandbox Code Playgroud)
(identity Math)
返回Class
表示Math
类的对象.您正在尝试访问PI
此Class
对象中调用的实例成员,但它不存在.(这是从访问称为静态成员不同PI
的Math
类).你永远只能用这个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
Run Code Online (Sandbox Code Playgroud)
做你想做的最短路可能就是Math/PI
.
user> (macroexpand '(Math/PI))
(. Math PI)
user> Math/PI
3.141592653589793
user> (. Math PI)
3.141592653589793
Run Code Online (Sandbox Code Playgroud)