javaから実行その7コンパイルして、invokeしてeval実行 - Clojure
2014/02/08
clojure
eval
java
clojureです。
そろそろ行き詰まってきた感があります。
evalを試してみました。
まずevalを内部で実行する関数を用意して、それにlistを渡してあげるというイメージです。
参考
実行結果
#'clojure.core/m
class clojure.lang.Var
hello
package jp.deiji.ext;
import java.io.StringReader;
import clojure.lang.Compiler;
import clojure.lang.PersistentList;
import clojure.lang.Var;
public class ExtClojure07 {
public static void main(String[] args) {
a();
}
static void a() {
new clojure.lang.RT();
{//
// evalする関数を定義
String str = "(defn m[s](eval s))";
Object o = Compiler.load(new StringReader(str));
System.out.println(o);
System.out.println(o.getClass());
// listを生成
Object o2 = Compiler.load(new StringReader(
"(list (symbol (str \"print\" \"ln\")) \"hello\")"));
Var v = (Var) o;
v.invoke(o2);
}
}
}
: