2017-01-08 5 views
3

stackoverflow hereでこれと同じタイトルの質問がありますが、私はそれがJavaでこれに似た何かをすることが可能かどうか尋ねたいと思いました。文字列をJavaの関数に変換するには?

私はデスモスに似たものを作りたいと思っていました.Javascriptで行ったようなものですが、lwjgl 2を使ってJavaで作ってみたいと思います。私はJavaを初めて使いました。文字列をメソッドに変換します。出来ますか?

私は可能なオプションを探しましたが、私はあなた自身のJavaを作ることができることを発見しましたeval()メソッド。しかし、私はウィンドウ幅のすべてのピクセルの文字列のxを置き換えたくありません。

ありがとうございます。

答えて

5

実行時に文字列として定義された式を評価できるエンジン/ライブラリが必要です。評価コードを関数呼び出し(例えばラムダ関数)にラップすると、必要なものが得られます。

オプション1:exp4jを使用できます。 exp4jは、フットプリントの小さいライブラリで、実行時に式と関数を評価することができます。次に例を示します。

Expression e = new ExpressionBuilder("3 * sin(y) - 2/(x - 2)") 
     .variables("x", "y") 
     .build() 
     .setVariable("x", 2.3) 
     .setVariable("y", 3.14); 
double result = e.evaluate(); 

オプション2:あなたはJava's script engineを使用することができます。あなたはJavaScriptで、例えば、定義された式を評価するためにそれを使用することができます:

ScriptEngineManager manager = new ScriptEngineManager(); 
ScriptEngine engine = manager.getEngineByName("js"); 
Object result = engine.eval("sin(1.25)"); 

オプション3:ネイティブJavaへコンパイル。この方法では、テンプレートを使用して、式を含むクラスで.javaファイルを生成します。あなたがJavaコンパイラを呼び出すよりも。このアプローチには、インプリメンテーションにある程度の複雑さと初期レイテンシ(クラスがコンパイルされるまで)があるが、パフォーマンスが最も優れているという欠点があります。ここではいくつかのリンクが探求している。

ノートでは、あなたがセキュリティについて考える必要が心を持っています。セキュリティ制限なしで評価できるコードをユーザーが入力できるようにすることは非常に危険です。

+0

オプション3はバイトコード生成(コンパイル時にはビルドツールプラグインを使用)または実行時に拡張できます。 –

+0

ご協力いただきありがとうございます。私は第3のオプションをどのように使用できるかについてのリンクを掲載することができますか?それはかなり面白いようです。 – odermark

+1

@odermarkは、応答へのリンクを追加しました。私は最初にあなたに良いスタートを与えるべきだと思います。 –

関連する問題