何を求めているのかよくわかりません(笑)、まあ、それが可能かというと、そうですね。そうでない場合は、申し訳ありません。
Javaプログラムがあります。これにはMain
クラスとJavaCalculator
クラスがあります。JavaCalculator
には、
public int sum(int a,int b) {
return a + b
}
ここで、Rubyファイルがあります。MyProgram.rb
と呼ばれます。
MyProgram.rb
には、Rubyプログラムから期待できるものをすべて含めることができます。次のものが含まれていると仮定します。
class RubyMain
def initialize
print "The sum of 5 with 3 is #{sum(5,3)}"
end
def sum(a,b)
# <---------- Something will happen here
end
end
rubyMain = RubyMain.new
良い。さて、あなたはすでに私がしたいことを疑っているかもしれません:
MyProgram.rb
JavaCalculator
のインスタンスが作成され、そのsum
関数が実行され、値が取得されてから出力されます。注: "JavaCalculator
のインスタンスを作成する"は完全に必要なわけではありません。 sum
クラスからMain
関数を実行するだけで十分です。
私の質問:そのようなことは可能ですか? Javaプログラムを内部的に実行するRubyファイルにJava上記の例では、RubyファイルはJavaプログラムに合計を求めて結果を返すように要求します。
これはばかげて聞こえるかもしれません。私はこの種のものに新しいです(可能であれば)。
なぜ私はこれを尋ねているのですか?
私はJavaプログラム、ある種のゲームエンジンです。しかし、私の対象読者はRubyコーダーの束です。私はしたくありません。 Javaですべてを学習させます。そのため、おそらくJavaプログラムは機能(ウィンドウを作成する能力、スプライトの表示、サウンドの再生...)そして、私の聴衆は単にRubyロジックでコーディングできます。これは基本的にジャストasks my Javaスプライトの表示やサウンドの再生などを行うエンジン。
それは私がこれについて尋ねることについてであるときです。
あなたがおそらく本当に望んでいるのはJRubyです-> http://jruby.org/
JRubyは完全な機能を備えた、準拠したRuby Java仮想マシンでの実装です。一部のRubyistによると、これはたまたま最速です(ただし、 Java 7互換性のあるVM)で実行されます。JRubyはJavaライブラリを呼び出し、それらの呼び出しから戻り値を取得できます。世界。
あなたは私たちを信じていないようですから。
JRubyを使用して、JavaからRubyコードを実行する方法を次に示します。 JRubyは「別のツール」ではなく、Java上でRubyを実行するために必要なJARファイルです。それはと同じくらい簡単です
package com.example;
import org.jruby.embed.LocalVariableBehavior;
import org.jruby.embed.ScriptingContainer;
public class Main {
private ScriptingContainer Ruby;
public static void main(String[] args) {
new Main().run();
}
public void run() {
Ruby = new ScriptingContainer(LocalVariableBehavior.PERSISTENT);
// Assign the Java objects that you want to share
Ruby.put("main", this);
// Execute a script (can be of any length, and taken from a file)
Object result = Ruby.runScriptlet("main.hello_world");
// Use the result as if it were a Java object
System.out.println(result);
}
public String getHelloWorld() {
return "Hello, worlds!";
}
}
ご覧のように、Rubyのhello_world
からJavaのgetHelloWorld
命名規則に変換するのは非常に賢明です。