SLAX 機能の概要
Junos OSリリース12.2以降のリリースでサポートされているSLAX言語のバージョン1.1は、機能をサポートしています。スクリプトの複雑さが増したり、コード セグメントが複数の場所に表示された場合は、コードをモジュール化して関数を作成できます。関数は引数を受け入れ、明示的に呼び出された場合にのみ実行されます。
Junos OSリリース14.2以降のリリースでサポートされているSLAX言語のバージョン1.2は、テンプレートと機能の両方の引数としてSLAX要素をサポートしています。
関数には、テンプレートに比べて次のような利点があります。
引数は、名前ではなく位置で渡されます。
結果ツリーフラグメントとは対照的に、戻り値はオブジェクトにすることができます。
関数は式で使用できます。
機能は動的に解決できます(EXSLT
dyn:evaluate()を使用)。
SLAX では、関数定義をスクリプトのトップレベル ステートメントとして定義します。関数定義 function は、 キーワード、関数名、引数のセット、中括弧で区切られたコードブロックで構成されています。関数名は修飾名でなければなりません。引数リストは、関数呼び出しに基づいて位置割り当てられたパラメーター名のコンマ区切りのリストです。末尾の引数にはデフォルト値を設定できます。または、 ステートメントを使用して、関数ブロック内で関数パラメーターを param 定義することもできます。構文は次のとおりです。
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;
}
戻り値には、スカラー値、XML 要素または XPath 式、または返される値を発行する一連の命令を指定できます。
関数呼び出しの引数の数が定義よりも少ない場合は、後続引数にデフォルト値が使用されます。関数の呼び出しに定義よりも多くの引数がある場合、関数呼び出しはエラーを生成します。
次の例では、 、 、および の 3 つのパラメーターheightwidthを持つ関数sizeを定義していますscale。のデフォルト値scaleは1です。関数呼び出し引数リストに引数が含scaleまれていない場合、計算はその引数にデフォルト値 1 を使用します。関数の戻り値は、 要素で囲まれた 、 、 height変数scaleのwidth積です<size>。
メイン一致テンプレートでは、関数呼び出しでは、ソース XML ファイル内の各 graphic/dimension 要素から選択された幅と高さのデータを使用します。スクリプトは関数を評価し、 ステートメントは copy-of 要素の内容として戻り値を結果ツリーに <out> 出力します。
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/.));
}
}
}
以下の関数定義では、コンマ区切りリストではなく、ステートメントを使用 param してパラメーターを定義します。関数の動作は、前の例と同じです。
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/.));
}
}
}