Przekazywanie parametrów do skryptu
Przekazujemy do skryptu parametr a
i b
umieszczając je w domyślnym kontekście pobranym z silnika, w zasięgu silnikowym.
Wyniki działania skryptu są automatycznie umieszczane w obiekcie ScriptContext
, a więc
i w ScriptEngine
w zasięgu silnika. ScriptEngineManager
nie zawiera żadnych parametrów.
Klasa E09_PassingParamsToScript
package jsr223groovy; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; import java.io.IOException; import java.io.Reader; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class E09_PassingParamsToScript { public static void main(String[] args) { ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine se = sem.getEngineByName("Groovy"); String fileName = "src/scripts/skrypt3.groovy"; Path path = Paths.get(fileName); if (! Files.exists(path) ) { System.out.println(path.toAbsolutePath() + " nie istnieje."); return; } ScriptContext sc = se.getContext(); sc.setAttribute("a", 125, ScriptContext.ENGINE_SCOPE); sc.setAttribute("b", 3, ScriptContext.ENGINE_SCOPE); try { Reader reader = Files.newBufferedReader(path); se.eval(reader); } catch (IOException | ScriptException e) { e.printStackTrace(); } System.out.println("sem: " + sem.get("result")); int[] result1 = (int[]) se.get("result"); for(int x1: result1){ System.out.println("en: "+ x1); } int[] result2 = (int[]) sc.getAttribute("result", ScriptContext.ENGINE_SCOPE); for(int x2: result2){ System.out.println("sc: "+ x2); } } }
Skrypt skrypt3.groovy
package scripts def dividing(int a, int b){ def a1 = a.intdiv(b) def a2 = a % b def res = [a1, a2] as int[] return res; } result = dividing(a,b) println("dividing($a, $b) = $result")
Po uruchomieniu klasy na konsoli zobaczymy:
dividing(125, 3) = [41, 2] sem: null en: 41 en: 2 sc: 41 sc: 2
Klasa module-info.java
module jsr223groovy { requires org.apache.groovy; requires java.scripting; requires java.sql; exports jsr223groovy; opens jsr223groovy; }