JavaからjRubyを起動すると、JavaにRubyインタプリタを組み込むことが出来る。
どうやるのかなと思ってたら。
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");