Определяемые пользователем функции в Bicep
В файле Bicep можно создать собственные функции. Эти функции доступны для использования в файлах Bicep. Определяемые пользователем функции отличаются от стандартных функций Bicep, которые автоматически доступны в файлах Bicep. Создайте собственные функции при наличии сложных выражений, которые многократно используются в файлах Bicep.
Ограничения
При определении пользовательской функции есть несколько ограничений:
- Функция не может обращаться к переменным.
- Функция может использовать только параметры, определенные в самой функции.
- Функция не может использовать эталонную функцию или любую функцию из списка функций.
- Для параметров этой функции нельзя задавать значения по умолчанию.
Определение функции
Используйте инструкцию 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 |
приветствиеArray | Массив | ["Hi Evie!", "Hi Casper!"] |
greetingObject | Object | {"hello":"Привет Джон!"} |
nameArray | Массив | ["Джон"] |
addNameArray | Массив | ["Мэри", "Боб","Джон"] |
При использовании интерфейса командной строки Bicep версии 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 |
Следующие шаги
- Сведения о структуре и синтаксисе файлов Bicep см. в статье "Общие сведения о структуре и синтаксисе файлов Bicep".
- Список доступных функций Bicep см. в разделе "Функции Bicep".