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 表达式,也可以是发出要退还值的一组说明。
如果功能调用中的参数比定义中的参数少,则默认值用于任何跟踪参数。如果功能调用中的参数多于定义中的参数,则功能调用会生成错误。
以下示例定义了该功能,该功能size有三个参数:width、 height和 scale。默认值为 scale 1。如果功能调用参数列表不包括scale该参数,则计算为该参数使用 1 的默认值。该功能的回报值是包含在一个<size>元素中的 、 height和scale变量的产品width。
在主匹配模板中,功能调用使用源 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/.));
}
}
}