containerContextDependent

Die Eigenschaft containerContextDependent gibt an, dass Verweise innerhalb einer eigenständigen Funktion (siehe Funktionen) mit Bezug auf den Container (Hauptabschnitt) aufgelöst werden müssen, in dem sich die Funktion nach der Generierung befinden wird. D. h., dass die Deklarationen und Importe des Containers verwendet werden, um Verweise während des Generierungprozesses aufzulösen. Die eigenständige Funktion selbst muss - obwohl sie ein übergeordneter Abschnitt ist - nicht alle Pakete importieren, die zur Auflösung von Verweisen erforderlich sind, sofern dies der endgültige Container auch nicht tut. Beispielsweise können Sie diese Eigenschaft verwenden, wenn die Funktion in mehr als einem Programm genutzt wird, und die Variablennamen werden - abhängig von dem Programm, das die Funktion aufruft - unterschiedlich aufgelöst.

Verwenden Sie die Eigenschaft containerContextDependent nur mit eigenständigen Funktionen. EGL unterstützt eigenständige Funktionen für die Kompatibilität mit Programmen (wie sie z. B. mit VisualAge Generator erstellt werden), bei denen die Sprache keine Bibliotheken unterstützt. Verwenden Sie weder eigenständige Funktionen noch die Eigenschaft containerContextDependent, wenn Sie neuen Code schreiben.

Beispiel

Das erste Codesegment unten stammt aus dem Paket p:
package p;

Program pgm {includeReferencedFunctions = yes}
  function main()
    standaloneFunc1();
  end

  function functionInPgm() 
  end
end

DataItem intInP int end
Im nächsten Codesegment enthält standaloneFunc1() einen Verweis auf eine Funktion in dem Container, der die Funktion aufruft (d. h. auf functionInPgm() in dem Container pgm), sowie einen Verweis auf einen Abschnitt, der im Abschnittsbereich (Part Scope) des Containers aufgelöst wird (d. h., der im selben Paket p aufgelöst wird wie das Programm pgm). In standaloneFunc2() werden dieselben Verweise nicht aufgelöst, weil die Eigenschaft containerContextDependent nicht für die eigenständige Funktion angegeben ist. standaloneFunc3() zeigt, dass Sie noch auf einen Abschnitt ohne containerContextDependent verweisen können, solange Sie den Paketnamen in den Verweis einbeziehen.
package p2;

function standaloneFunc1 { containerContextDependent=yes }
  // Verweis auf Funktion wird aufgelöst
  // wegen containerContextDependent
  functionInPgm();
  
  // Verweis auf Abschnitt wird aufgelöst
  // wegen containerContextDependent
  myVar intInP;
end

function standaloneFunc2
  functionInPgm();   // Verweis kann nicht aufgelöst werden
  myVar intInP;      // Verweis kann nicht aufgelöst werden
end

function standaloneFunc3
  // Verweis auf Abschnitt wird aufgelöst, weil
  // er durch den Paketnamen qualifiziert wird
  myVar p.intInP;
end

Überlegungen zur Kompatibilität

Tabelle 1. Überlegungen zur Kompatibilität
Plattform Problem
JavaScript-Generierung Die Eigenschaft containerContextDependent wird nicht unterstützt.

Feedback