javaから実行その5コンパイルして、invokeする - Clojure
2014/02/02
clojure
java
clojureです。
javaから実行その5コンパイルして、invokeするです。
ふたつdefnで関数が定義されている場合、varのinvokeを呼ぶと最後に定義されたものが呼ばれるようにみえます。
ふたつdefnで関数定義されていてひつと前に定義されていたものを呼ぶことができました。
package jp.deiji.ext;
import java.io.StringReader;
import clojure.lang.Compiler;
import clojure.lang.Var;
public class ExtClojure05 {
public static void main(String[] args) {
a();
}
static void a() {
new clojure.lang.RT();
{// 二つdefnで定義されていた場合どちらを呼ぶか実験
String str = "(defn p1[](println \"その1\" )) (defn p2[](println \"その2\")) ";
Object o = Compiler.load(new StringReader(str));
System.out.println(o);
System.out.println(o.getClass());
Var v = (Var) o;
v.invoke();
}
{// 二つdefnで定義されており、呼ばれた関数から定義済みのものを呼び出す
String str = "(defn p1[](println \"その1\" )) (defn p2[](p1)) ";
Object o = Compiler.load(new StringReader(str));
System.out.println(o);
System.out.println(o.getClass());
Var v = (Var) o;
v.invoke();
}
}
}
結果
#'clojure.core/p2
class clojure.lang.Var
その2
#'clojure.core/p2
class clojure.lang.Var
その1
: