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

Interfejs ScriptContext i zasięg Bindings

Interfejs ScriptContext zawiera domyślną instancję Bindings. Pary <klucz, wartość> dodane do tej instancji maja zasięg silnika (ScriptContext.ENGINE_SCOPE).
Gdy do kontekstu używając metody ctx.setBindings(Bindings) dodamy nowe SimpleBindings oznaczamy je jako ScriptContext.GLOBAL_SCOPE wówczas dodawane pary <klucz, wartość> są widoczne w zasięgu globalnym.
Jeśli mamy klucze w obu zasięgach i wyszukamy atrybut nie podając zasięgu otrzymamy atrybut o zasięgu silnika. Jeżeli wyszukamy podając zasięg silnika otrzymamy tę samą wartość. Wartość globalną otrzymamy, gdy wyszukując klucz, podamy, że interesuje nas zasięg globalny.
O zasięgach będziemy jeszcze mówić.
Wartość zmiennej ScriptContext.ENGINE_SCOPE wynosi 100. Wartość zmiennej ScriptEngine.GLOBAL_SCOPE wynosi 200. Zmienna o niższej wartości jest wyszukiwana jako pierwsza.

Klasa E06_ScriptContextAndScopes
package jsr223groovy;

import javax.script.*;
import java.util.List;

public class E06_ScriptContextAndScopes {
	public static void main(String[] args) {
		//ScriptContext ctx = new SimpleScripContext();
		SimpleScriptContext ctx = new SimpleScriptContext();
		ctx.setAttribute("a", 125, ScriptContext.ENGINE_SCOPE);
		Bindings gBindings = new SimpleBindings();
		ctx.setBindings(gBindings, ScriptContext.GLOBAL_SCOPE);
		ctx.setAttribute("a", 126, ScriptContext.GLOBAL_SCOPE);
		System.out.println(ctx.getAttribute("a"));
		System.out.println(ctx.getAttribute("a", ScriptContext.ENGINE_SCOPE));
		System.out.println(ctx.getAttribute("a", ScriptContext.GLOBAL_SCOPE));
		System.out.println(ctx.getAttributesScope("a"));
		List<Integer> scopes = ctx.getScopes();
		System.out.println(scopes);


	}
}
Klasa module-info.java
module jsr223groovy {

    requires org.apache.groovy;

    requires java.scripting;
    requires java.sql;
}

Gdy uruchomimy klasę na konsoli zobaczymy:

125
125
126
100
[100, 200]