BSFさんとJRubyさん
BSF(http://jakarta.apache.org/bsf/index.html)を使ってみたよ。その時のメモ。
JavaからRubyへ値を渡す
Java側で『declareBean(名前, 値, 値の型)』を呼んでやると、Ruby側からは『$名前』でアクセスできるようになる。
// JRubyエンジンを登録 BSFManager.registerScriptingEngine("jruby", "org.jruby.javasupport.bsf.JRubyEngine", null); BSFManager manager = new BSFManager(); // System.outを $outとして定義 manager.declareBean("out", System.out, System.out.getClass()); // スクリプトを実行 String script = "$out.println 'hello jruby!!'"; manager.eval("jruby", // スクリプトエンジンに、先ほど登録した "ruby"を指定 "", // スクリプトファイル名(空でOK) 1, // 開始行(とりあえず1で) 1, // 開始カラム(とりあえず1で) script);
RubyからJavaへ値を返す
// register JRubyEngile BSFManager.registerScriptingEngine("jruby", "org.jruby.javasupport.bsf.JRubyEngine", null); BSFManager manager = new BSFManager(); // declare x manager.declareBean("x", new Integer(10), Integer.class); // eval script String script = "$x * $x"; Object result = manager.eval("jruby", "", 1, 1, script); // evalの結果を出力 System.out.println(result); ==> 100