SLAX-Funktionen im Überblick
Version 1.1 der SLAX-Sprache, die in Junos OS Version 12.2 und höheren Versionen unterstützt wird, unterstützt Funktionen. Wenn die Komplexität eines Skripts zunimmt oder ein Codesegment an mehreren Stellen auftaucht, können Sie den Code modularisieren und Funktionen erstellen. Funktionen akzeptieren Argumente und werden nur ausgeführt, wenn sie explizit aufgerufen werden.
Version 1.2 der SLAX-Sprache, die in Junos OS Version 14.2 und höheren Versionen unterstützt wird, unterstützt SLAX-Elemente als Argumente für Vorlagen und Funktionen.
Funktionen haben mehrere Vorteile gegenüber Vorlagen, darunter die folgenden:
Argumente werden nach Position und nicht nach Namen übergeben.
Bei den Rückgabewerten kann es sich nicht um Ergebnisstrukturfragmente, sondern um Objekte handeln.
Funktionen können in Ausdrücken verwendet werden.
Funktionen können dynamisch aufgelöst werden (mittels EXSLT
dyn:evaluate()
).
In SLAX definieren Sie eine Funktionsdefinition als Anweisung der obersten Ebene im Skript. Die Funktionsdefinition besteht aus dem Schlüsselwort, dem function
Funktionsnamen, einer Reihe von Argumenten und einem durch geschweifte Klammern getrennten Codeblock. Der Funktionsname muss ein qualifizierter Name sein. Die Argumentliste ist eine durch Kommas getrennte Liste von Parameternamen, die basierend auf dem Funktionsaufruf positionsgebunden zugewiesen werden. Nachfolgende Argumente können Standardwerte haben. Alternativ können Sie mit der Anweisung Funktionsparameter innerhalb des Funktionsbausteins param
definieren. Die Syntax lautet:
function function-name (argument-list) { ... result return-value; }
function function-name () { param param-name1; param param-name2; param param-name3 = default-value; ... result return-value; }
Bei dem Rückgabewert kann es sich um einen Skalarwert, ein XML-Element oder einen XPath-Ausdruck oder eine Reihe von Anweisungen handeln, die den zurückzugebenden Wert ausgeben.
Wenn der Funktionsaufruf weniger Argumente enthält als in der Definition, werden die Standardwerte für alle nachfolgenden Argumente verwendet. Wenn der Funktionsaufruf mehr Argumente enthält als die Definition, generiert der Funktionsaufruf einen Fehler.
Im folgenden Beispiel wird die Funktion size
definiert, die über drei Parameter verfügt: width
, height
und scale
. Der Standardwert für scale
ist 1. Wenn die Argumentliste des Funktionsaufrufs das Argument scale
nicht enthält, wird bei der Berechnung der Standardwert 1 für dieses Argument verwendet. Der Rückgabewert der Funktion ist das Produkt aus , und scale
den Variablen, height
die width
in einem <size>
Element eingeschlossen sind.
In der Hauptübereinstimmungsvorlage verwendet der Funktionsaufruf Breiten- und Höhendaten, die aus jedem graphic/dimension
Element in der XML-Quelldatei ausgewählt wurden. Das Skript wertet die Funktion aus, und die Anweisung gibt den Rückgabewert als Inhalt des Elements <out>
an die copy-of
Ergebnisstruktur aus.
version 1.1; ns my = "http://www.example.com/myfunctions"; function my:size ($width, $height, $scale = 1) { result <size> { expr $width * $height * $scale; } } match / { for-each (graphic/dimension) { <out> { copy-of my:size((width/.), (height/.)); } } }
In der folgenden Funktionsdefinition werden param
Anweisungen verwendet, um die Parameter anstelle einer durch Trennzeichen getrennten Liste zu definieren. Das Verhalten der Funktion ist identisch mit dem im vorherigen Beispiel.
version 1.1; ns my = "http://www.example.com/myfunctions"; function my:size () { param $width; param $height; param $scale = 1; result <size> { expr $width * $height * $scale; } } match / { for-each (graphic/dimension) { <out> { copy-of my:size((width/.), (height/.)); } } }