Dies entspricht der Frage "Capturing Nashorn's Global Variables". Ich finde es sehr einschränkend, die Zuordnung von Variablen zum globalen Objekt nicht abfangen zu können.Auf globale Nashorn-Objektvariablen zugreifen/abfangen
Sagen Sie zum Beispiel, dass ich das Skript "a = 10" auswerte. Vielleicht möchte ich einen Listener anrufen, um etwas zu benachrichtigen, dass 'a' zum Bereich hinzugefügt wurde. Die einzige Möglichkeit, dies zu tun, besteht darin, das globale Objekt zu untersuchen, nachdem das Skript evaluiert wurde.
Oder sagen, ich möchte ein Objekt abfangen, das dem globalen Geltungsbereich zugewiesen ist, und es durch einen anderen ersetzen; wenn es Bindings
wurde mit konnte ich umsetzen put
und delegieren zu einigen anderen Bindungen aus:
public Object put(String name, Object value) {
//put a toStringed version of the object in scope
return delegate.put(name, value+"");
}
Auf diese Weise, wenn der Code ‚a = 10‘ evalled ist, wäre es „10“ in Rahmen setzen statt 10 .
Es ist praktisch, eine Bindings
Schnittstelle zu implementieren, aber frustrierend, dass ich etwas wie diese Implementierung für das globale Objekt nicht bereitstellen kann. ScriptObjectMirror
ist endgültig, also kann ich dies nicht einmal überlasten und den nachfolgenden Aufruf zum internen ScriptObject
übernehmen. Fehle ich etwas?