Bicep 的 lambda 函数
本文介绍要在 Bicep 中使用的 lambda 函数。 Lambda 表达式(或 lambda 函数)本质上可以作为参数传递的代码块。 它们可以采用多个参数,但限制为单个代码行。 在 Bicep 中,Lambda 表达式采用以下格式:
<lambda variable> => <expression>
注意
lambda 函数仅在 Bicep CLI version 0.10.X 或更高版本中受支持。
限制
Bicep lambda 函数具有以下限制:
- Lambda 表达式只能直接指定为这些函数中的函数参数:
filter()
、map()
、reduce()
、sort()
和toObject()
- 目前不支持在资源或模块数组访问中使用 lambda 变量(Lambda 表达式中使用的临时变量)。
- 目前不支持在
listKeys
函数中使用 lambda 变量。 - 目前不支持在 reference 函数中使用 lambda 变量。
filter
filter(inputArray, lambda expression)
借助自定义筛选函数来筛选数组。
命名空间:sys。
参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
inputArray | 是 | array | 要筛选的数组。 |
lambda 表达式 | 是 | 表达式 | lambda 表达式将应用于每个输入数组元素。 如果结果为 true,则该项将包含在输出数组中;否则,将放弃该项。 |
返回值
一个数组。
示例
下面的示例展示了如何使用 filter
函数。
var dogs = [
{
name: 'Evie'
age: 5
interests: ['Ball', 'Frisbee']
}
{
name: 'Casper'
age: 3
interests: ['Other dogs']
}
{
name: 'Indy'
age: 2
interests: ['Butter']
}
{
name: 'Kira'
age: 8
interests: ['Rubs']
}
]
output oldDogs array = filter(dogs, dog => dog.age >=5)
上一示例中的输出显示五岁或年纪更大的狗:
名称 | 类型 | 值 |
---|---|---|
oldDogs | Array | [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
var itemForLoop = [for item in range(0, 10): item]
output filteredLoop array = filter(itemForLoop, i => i > 5)
output isEven array = filter(range(0, 10), i => 0 == i % 2)
上一示例的输出:
名称 | 类型 | 值 |
---|---|---|
filteredLoop | Array | [6, 7, 8, 9] |
isEven | Array | [0, 2, 4, 6, 8] |
filterdLoop 显示数组中大于 5 的数字;isEven 显示数组中的偶数。
map
map(inputArray, lambda expression)
将自定义映射函数应用于数组的每个元素。
命名空间:sys。
参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
inputArray | 是 | array | 要映射的数组。 |
lambda 表达式 | 是 | 表达式 | 将 Lambda 表达式应用于每个输入数组元素,以便生成输出数组。 |
返回值
一个数组。
示例
以下示例演示如何使用 map
函数。
var dogs = [
{
name: 'Evie'
age: 5
interests: ['Ball', 'Frisbee']
}
{
name: 'Casper'
age: 3
interests: ['Other dogs']
}
{
name: 'Indy'
age: 2
interests: ['Butter']
}
{
name: 'Kira'
age: 8
interests: ['Rubs']
}
]
output dogNames array = map(dogs, dog => dog.name)
output sayHi array = map(dogs, dog => 'Hello ${dog.name}!')
output mapObject array = map(range(0, length(dogs)), i => {
i: i
dog: dogs[i].name
greeting: 'Ahoy, ${dogs[i].name}!'
})
前述示例的输出为:
名称 | 类型 | 值 |
---|---|---|
dogNames | Array | ["Evie","Casper","Indy","Kira"] |
sayHi | Array | ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"] |
mapObject | Array | [{"i":0,"dog":"Evie","greeting":"Ahoy, Evie!"},{"i":1,"dog":"Casper","greeting":"Ahoy, Casper!"},{"i":2,"dog":"Indy","greeting":"Ahoy, Indy!"},{"i":3,"dog":"Kira","greeting":"Ahoy, Kira!"}] |
dogNames 显示对象数组中的狗名称;sayHi 连接“Hello”和每个狗名称;mapObject 创建另一个对象数组。
reduce
reduce(inputArray, initialValue, lambda expression)
借助自定义 reduce 函数减少数组。
命名空间:sys。
参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
inputArray | 是 | array | 要减少的数组。 |
initialValue | 是 | any | 初始值。 |
lambda 表达式 | 是 | 表达式 | 用于聚合当前值和下一个值的 Lambda 表达式。 |
返回值
任何。
示例
下面的示例展示了如何使用 reduce
函数。
var dogs = [
{
name: 'Evie'
age: 5
interests: ['Ball', 'Frisbee']
}
{
name: 'Casper'
age: 3
interests: ['Other dogs']
}
{
name: 'Indy'
age: 2
interests: ['Butter']
}
{
name: 'Kira'
age: 8
interests: ['Rubs']
}
]
var ages = map(dogs, dog => dog.age)
output totalAge int = reduce(ages, 0, (cur, next) => cur + next)
output totalAgeAdd1 int = reduce(ages, 1, (cur, next) => cur + next)
前述示例的输出为:
名称 | 类型 | 值 |
---|---|---|
totalAge | int | 18 |
totalAgeAdd1 | int | 19 |
totalAge 对狗的年龄进行求和;totalAgeAdd1 的初始值为 1,并将所有狗的年龄添加到初始值。
output reduceObjectUnion object = reduce([
{ foo: 123 }
{ bar: 456 }
{ baz: 789 }
], {}, (cur, next) => union(cur, next))
前述示例的输出为:
名称 | 类型 | 值 |
---|---|---|
reduceObjectUnion | object | {"foo":123,"bar":456,"baz":789} |
union 函数返回包含参数中所有元素的单个对象。 函数调用将对象的键值对联合为一个新对象。
sort
sort(inputArray, lambda expression)
借助自定义 sort 函数对数组进行排序。
命名空间:sys。
参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
inputArray | 是 | array | 要排序的数组。 |
lambda 表达式 | 是 | 表达式 | 用于比较两个数组元素以进行排序的 Lambda 表达式。 如果为 true,第二个元素将排在输出数组的第一个元素之后。 |
返回值
一个数组。
示例
以下示例演示如何使用 sort
函数。
var dogs = [
{
name: 'Evie'
age: 5
interests: ['Ball', 'Frisbee']
}
{
name: 'Casper'
age: 3
interests: ['Other dogs']
}
{
name: 'Indy'
age: 2
interests: ['Butter']
}
{
name: 'Kira'
age: 8
interests: ['Rubs']
}
]
output dogsByAge array = sort(dogs, (a, b) => a.age < b.age)
上述示例的输出将狗对象按照从最年轻到最年长进行排序:
名称 | 类型 | 值 |
---|---|---|
dogsByAge | Array | [{"name":"Indy","age":2,"interests":["Butter"]},{"name":"Casper","age":3,"interests":["Other dogs"]},{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
toObject
toObject(inputArray, lambda expression, [lambda expression])
通过一个自定义键函数和可选的自定义值函数将数组转换为对象。 请参阅有关将对象转换为数组的项。
命名空间:sys。
参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
inputArray | 是 | array | 用于创建对象的数组。 |
lambda 表达式 | 是 | 表达式 | 用于提供键谓词的 lambda 表达式。 |
lambda 表达式 | 否 | 表达式 | 用于提供值谓词的 lambda 表达式。 |
返回值
一个对象。
示例
以下示例展示了如何将 toObject
函数与两个必需参数一起使用:
var dogs = [
{
name: 'Evie'
age: 5
interests: [ 'Ball', 'Frisbee' ]
}
{
name: 'Casper'
age: 3
interests: [ 'Other dogs' ]
}
{
name: 'Indy'
age: 2
interests: [ 'Butter' ]
}
{
name: 'Kira'
age: 8
interests: [ 'Rubs' ]
}
]
output dogsObject object = toObject(dogs, entry => entry.name)
前面的示例基于数组来生成对象。
名称 | 类型 | Value |
---|---|---|
dogsObject | Object | {"Evie":{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},"Casper":{"name":"Casper","age":3,"interests":["Other dogs"]},"Indy":{"name":"Indy","age":2,"interests":["Butter"]},"Kira":{"name":"Kira","age":8,"interests":["Rubs"]}} |
具有第三个参数的以下 toObject
函数提供相同的输出。
output dogsObject object = toObject(dogs, entry => entry.name, entry => entry)
以下示例展示了如何将 toObject
函数与三个参数一起使用。
var dogs = [
{
name: 'Evie'
properties: {
age: 5
interests: [ 'Ball', 'Frisbee' ]
}
}
{
name: 'Casper'
properties: {
age: 3
interests: [ 'Other dogs' ]
}
}
{
name: 'Indy'
properties: {
age: 2
interests: [ 'Butter' ]
}
}
{
name: 'Kira'
properties: {
age: 8
interests: [ 'Rubs' ]
}
}
]
output dogsObject object = toObject(dogs, entry => entry.name, entry => entry.properties)
前面的示例基于数组来生成对象。
名称 | 类型 | Value |
---|---|---|
dogsObject | Object | {"Evie":{"age":5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Other dogs"]},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age":8,"interests":["Rubs"]}} |
后续步骤
- 若要了解与 Bicep 函数相关的其他数组,请参阅 Bicep 函数 - 数组。