JavaFX z Arią - powrót do strony głównej

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;
}