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/.)); } } }