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 つのパラメーターheight
width
を持つ関数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/.)); } } }