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

Pobieranie parametrów ze skryptów (2)

Mamy skrypt zawierający parametry. Wykonujemy skrypt i sprawdzamy gdzie umieszczone zostały parametry ze skryptu. Zwróćmy uwagę, że parametry zostały podane jako int a = 125 oraz b = 3.

Klasa E10_AccessingParamsFromScript2.java
package jsr223groovy;

import javax.script.*;
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 E10_AccessingParamsFromScript2 {
	public static void main(String[] args) {

		ScriptEngineManager sem = new ScriptEngineManager();
		ScriptEngine se = sem.getEngineByName("Groovy");

		String fileName = "src/scripts/skrypt5.groovy";
		Path path = Paths.get(fileName);
		if (! Files.exists(path) ) {
			System.out.println(path.toAbsolutePath() + " nie istnieje.");
			return;
		}
		ScriptContext sc = se.getContext();
		try {
			Reader reader = Files.newBufferedReader(path);
			se.eval(reader);
		}
		catch (IOException | ScriptException e) {
			e.printStackTrace();
		}
		System.out.println("sem: " + sem.get("a"));
		System.out.println("se: " + se.get("a"));
		System.out.println("sc: " + sc.getAttribute("a", ScriptContext.ENGINE_SCOPE));
		System.out.println("sem: " + sem.get("b"));
		System.out.println("se: " + se.get("b"));
		System.out.println("sc: " + sc.getAttribute("b", ScriptContext.ENGINE_SCOPE));
	}
}
Skrypt
package scripts

int a = 125
b = 3

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
se: null
sc: null
sem: null
se: 3
sc: 3

Jak widzimy zmienna a, stała się zmienna lokalną w skrypcie i nie jest obecna w Bindins w żadnym zakresie.

Klasa module-info.java
module jsr223groovy {

    requires org.apache.groovy;

    requires java.scripting;
    requires java.sql;

    exports jsr223groovy;
    opens jsr223groovy;
}