你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Bicep 中的用户定义函数

在 Bicep 文件中,可以创建自己的函数。 这些函数可用于 Bicep 文件。 用户定义函数不同于 Bicep 文件中自动可用的标准 Bicep 函数。 当有复杂的表达式在 Bicep 文件中重复使用时,请创建自己的函数。

需要安装 Bicep CLI 0.26.X 或更高版本才能使用此功能。

限制

定义用户函数时,存在一些限制:

  • 该函数不能访问变量。
  • 函数仅可使用函数中定义的参数。
  • 该函数不能使用 reference 函数或任何 list 函数。
  • 该函数的参数不能具有默认值。

定义函数

使用 func 语句定义用户定义的函数。

func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>

示例

以下示例演示如何定义和使用用户定义的函数:

func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'

func sayHelloString(name string) string => 'Hi ${name}!'

func sayHelloObject(name string) object => {
  hello: 'Hi ${name}!'
}

func nameArray(name string) array => [
  name
]

func addNameArray(name string) array => [
  'Mary'
  'Bob'
  name
]

output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')
output greetingArray array = map(['Evie', 'Casper'], name => sayHelloString(name))
output greetingObject object = sayHelloObject('John')
output nameArray array = nameArray('John')
output addNameArray array = addNameArray('John')

上述示例的输出如下:

名称 类型
azureUrl 字符串 https://microsoft.com/azure
greetingArray Array ["Hi Evie!","Hi Casper!"]
greetingObject Object {"hello":"Hi John!"}
nameArray Array ["John"]
addNameArray Array ["Mary","Bob","John"]

使用 Bicep CLI 版本 0.23.X 或更高版本,可以灵活地在用户定义的函数中调用另一个用户定义的函数。 在前面的示例中,使用 sayHelloString 的函数定义,可以将 sayHelloObject 函数重新定义为:

func sayHelloObject(name string) object => {
  hello: sayHelloString(name)
}

用户定义的函数支持使用 用户定义的数据类型。 例如:

@minValue(0)
type positiveInt = int

func typedArg(input string[]) positiveInt => length(input)

param inArray array = [
  'Bicep'
  'ARM'
  'Terraform'
]

output elements positiveInt = typedArg(inArray)

前述示例的输出为:

名称 类型
元素 positiveInt 3

后续步骤