JavaからJRubyメソッドに引数をわたしてみる。 2008/05/15

JavaからJRubyで定義したメソッドを呼び出します。
引数渡して結果をもらうことをしてみます。

下記の参考サイトを見よう見まねで試してみました。

参考



目指すはDSLですかね。

ここでは、rubyスクリプトを作ってevalしてますが、これがファイルならファイルを読み込んでevalすればよいわけですね。

ところでどこにjavadocあるんでしょうかね?
調べたいのは、RubyRuntimeAdapter,JavaEmbedUtils,JavaUtil,IRubyObject
とりあえずこれらのクラスは調べておいたほうがよいでしょう。

import java.util.ArrayList;
import org.jruby.Ruby;
import org.jruby.RubyRuntimeAdapter;
import org.jruby.javasupport.JavaEmbedUtils;
import org.jruby.javasupport.JavaUtil;
import org.jruby.runtime.builtin.IRubyObject;
public class Ttt {
public static void main(String[] args) throws Exception {
// jrubyに必要なlibへのパスを指定する?
Ruby ruby = JavaEmbedUtils.initialize(new ArrayList<String>());
// evalするぞ
RubyRuntimeAdapter evaler = JavaEmbedUtils.newRuntimeAdapter();
final String LS = System.getProperty("line.separator");
String script = "def hi(f)" + LS + " return 'i am ' + f " + LS + "end";

// evalします。
IRubyObject robj = evaler.eval(ruby, script);
// IRubyObject eval = evaler.eval(ruby, "hi");
// 引数用意
IRubyObject param = JavaUtil.convertJavaToRuby(ruby, "o_o!");

// 結果
IRubyObject eval = robj.callMethod(ruby.getCurrentContext(), "hi",
param);
System.out.println(eval);
}
}

: