Nashorn- und Skript-Gültigkeitsbereiche

9

Etwas verwirrt über die Bindung von ENGINE_SCOPE und GLOBAL_SCOPE in Nashorn, versucht der Diskussion hier .

Bevor ich das gelesen habe, war mein Verständnis von Gültigkeitsbereichen (zumindest im Nashorn), dass es eine einzelne, geteilte Bindung im GLOBAL_SCOPE und individuelle Bindungen in ENGINE_SCOPE für jede einzelne Engine gibt. Diese Seite scheint jedoch zu sagen, dass jede einzelne Engine die grundlegenden Javascript-Konstrukte in Bindungen speichert, die in den Engines ENGINE_SCOPE existieren (verwirrenderweise "Nashorn Global Scope" genannt). Das klingt so, als ob es die GLOBAL_SCOPE-Bindungen effektiv nutzlos macht (weil sie keinen Zugriff auf diese grundlegenden Konstrukte haben).

Was ich versuche, ist, einen Kontext zu erstellen, in den ich ein paar Skripts einfügen kann, und dann im Zusammenhang mit diesen Skripten immer wieder verschiedene Bindungen auszuwerten. Wenn jedoch der einzige Kontext, auf den ich zugreifen kann, die einzelnen Engines ENGINE_SCOPE sind (weil alles darüber keinen Zugriff auf grundlegende JavaScript-Konstrukte hat), dann scheint es, dass jeder lokale Aufruf denselben Bindings hinzugefügt werden muss. Weiß jemand, wie man mehrere Ebenen von Bindungen in Nashorn verwaltet?

    
Steve B. 30.05.2014, 16:53
quelle

2 Antworten

1

Wenn in ENGINE_SCOPE keine Variable gefunden wird, wird nach GLOBAL_SCOPE-Bindungen gesucht. Nashorns globales Objekt (das mit JS Object, Number, RegExp, ParseInt usw.) wird als Bindings umhüllt - und das ist Ihr ENGINE_SCOPE. Für z. Wenn Sie "foo" - & gt; "hallo" -Karteneintrag in GLOBAL_SCOPE setzen, wird dies in Skripten sichtbar sein - wenn ENGINE_SCOPE keinen Karteneintrag mit dem Namen "foo" hat.

    
A. Sundararajan 28.06.2014 13:31
quelle
-1

ENGINE_SCOPE ist grundsätzlich, wenn in Bindings eingefügte Variablen nur für diese bestimmte Engine sind, während GLOBAL_SCOPE ist, wenn Variablen, die in Bindungen gesetzt werden, für alle Engines aus derselben Factory zugänglich sind.

Und Sie haben Recht, wenn eine Variable in ENGINE_SCOPE nicht gefunden wird, sucht sie natürlich in GLOBAL_SCOPE .

Gemäß dem JavaDoc

static final int ENGINE_SCOPE
EngineScope-Attribute sind während der Lebensdauer einer einzelnen ScriptEngine sichtbar und eine Reihe von Attributen wird für jede Engine beibehalten.

static final int GLOBAL_SCOPE
GlobalScope-Attribute sind für alle von derselben ScriptEngineFactory erstellten Module sichtbar.

Wir können mehrere Bereiche in Nashorn mit einem ähnlichen Skriptkontext verwenden

%Vor%

Ich hoffe, das hilft

    
Nikhil R 08.05.2017 13:18
quelle

Tags und Links