それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

JavaからjRubyのソースコードを読み込んで使う。

JavaからjRubyを起動すると、JavaRubyインタプリタを組み込むことが出来る。
どうやるのかなと思ってたら。

evalしろや。ってことらしい。

まじEvalしとる。

package takuya.mmo;
import java.io.*;
import org.jruby.Ruby;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;

public class RubySample {

    public static void main(String[] args) {
        Ruby ruby = Ruby.getDefaultInstance();
        try {
            FileReader reader = new FileReader("test.rb");
            IRubyObject obj = ruby.evalScript(reader, "");  #script コードの実行
            System.out.println("Result: " + obj);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

RubyのクラスをJavaクラスとして使う

//Rubyのインタプリタを持ってくる。

        Ruby ruby = Ruby.getDefaultInstance();
        ThreadContext context = ruby.getCurrentContext();
       
        try {
            FileReader reader = new FileReader("test.rb"); //ソースを読み込む
            ruby.evalScript(reader, "");

            RubyClass rclass = ruby.getClass("MyDateTime"); 
            IRubyObject robj = rclass.callMethod(context,"new");
            IRubyObject obj = robj.callMethod(context,"getDateTime");
            System.out.println("Result: " + obj);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

実際に使う箇所

RubyClass rclass = ruby.getClass("MyDateTime");

使いどころ。難しい。

RubyDSL的な処理が出来るので、Ruby書式で設定ファイル作らせて、Javaで読み込んで使うとか。
インタプリターパターンですよねぇ。使いどころは難しい。