JavaからJRubyメソッドに引数をわたしてみる。
2008/05/15
java
jruby
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);
}
}
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);
}
}
: