2015-12-07 94 views
1

我想使用在文件中聲明的變量,它是一個函數變量(接口)。 對於函數的每個聲明(每行一個),我想將它添加到函數表中。可能嗎 ?有沒有一個函數來檢索代碼中聲明的變量?Java - 如何使用在文本文件中聲明的變量

謝謝。

TestFunction.java

ArrayList<Function> functions = new ArrayList<Function>();= 

    Path file = Paths.get("./FunctionsDeclarations"); 
    try (InputStream in = Files.newInputStream(file); 
     BufferedReader reader = 
      new BufferedReader(new InputStreamReader(in))) { 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      System.out.println(line); 
    //Ex: line = "Function f = times(X, compose(SIN, times(constant(2.), X)));" 
    //I want to use the Function variable f after the reading file : functions.add(f); 
      new ScriptEngineManager().getEngineByName("js").eval(line); 
     } 
    } catch (IOException x) { 
     System.err.println(x); 
    } 

FunctionsDeclarations

Function f = times(X, compose(SIN, times(constant(2.), X))); 
Function f2 = times(X, compose(SIN, times(constant(8.), X))); 
Function f3 = X; 
+2

請讓一個清晰的問題,並提供了一個給定的輸入的預期輸出。 – Manu

+0

@ user3185672但仍然不清楚。看到你的問題標題和問題,令人困惑 –

回答

1

可以EVAL函數,並隨後調用,使用ScriptEngine實例:

ScriptEngineManager engineManager = new ScriptEngineManager(); 
    ScriptEngine engine = engineManager.getEngineByName("js"); 

    engine.eval("f = function() { return 1; }"); 

    Invocable invocable = (Invocable) engine; 
    System.out.println(invocable.invokeFunction("f")); 

1.0打印在這個例子。

如果您需要評估Java表達式,看看JEXL:https://commons.apache.org/proper/commons-jexl/