Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V souboru Bicep můžete vytvořit vlastní funkce. Tyto funkce jsou k dispozici pro použití v souborech Bicep. Uživatelem definované funkce jsou oddělené od standardních funkcí Bicep, které jsou automaticky dostupné v souborech Bicep. Vytvořte si vlastní funkce, pokud máte složité výrazy, které se opakovaně používají v souborech Bicep. Použití uživatelem definovaných funkcí automaticky povolí generování kódu verze 2.0 .
K použití této funkce se vyžaduje rozhraní příkazového řádku Bicep verze 0.26.X nebo vyšší .
Omezení
Při definování funkce uživatele existují určitá omezení:
- Funkce může používat pouze parametry definované ve funkci.
- Funkce nemůže použít referenční funkci ani žádnou funkci seznamu .
- Parametry pro funkci nemůžou mít výchozí hodnoty.
Definování funkcí
Pomocí příkazu func definujte uživatelem definované funkce.
@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>
Následující příklady ukazují, jak definovat a používat uživatelem definované funkce:
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')
Výstupy z předchozích příkladů jsou:
| Název | Typ | Hodnota |
|---|---|---|
| azureUrl | Řetězec | https://microsoft.com/azure |
| greetingArray | Pole | ["Ahoj Evie!","Ahoj Casper!"] |
| objektPozdrav | Objekt | {"hello":"Ahoj John!"} |
| nameArray | Pole | ["John"] |
| addNameArray | Pole | ["Mary","Bob","John"] |
Máte možnost vyvolat jinou uživatelem definovanou funkci v rámci uživatelem definované funkce. V předchozím příkladu s definicí sayHelloStringfunkce můžete funkci předefinovat sayHelloObject takto:
func sayHelloObject(name string) object => {
hello: sayHelloString(name)
}
Uživatelem definované funkce podporují použití uživatelem definovaných datových typů. Příklad:
@minValue(0)
type positiveInt = int
func typedArg(input string[]) positiveInt => length(input)
param inArray array = [
'Bicep'
'ARM'
'Terraform'
]
output elements positiveInt = typedArg(inArray)
Výstup z předchozího příkladu je:
| Název | Typ | Hodnota |
|---|---|---|
| elementy | positiveInt | 3 |
Od rozhraní příkazového řádku Bicep verze 0.30.X můžou uživatelem definované funkce přistupovat k proměnným definovaným ve stejném souboru Bicep. Následující příklad ukazuje, jak uživatelem definovaná funkce může odkazovat na proměnnou:
var greetingPrefix = 'Hello'
func greet(name string) string => '${greetingPrefix}, ${name}!'
output message string = greet('Azure')
Výstup z předchozího příkladu je:
| Název | Typ | Hodnota |
|---|---|---|
| zpráva | Řetězec | Dobrý den, Azure! |
Počínaje rozhraním příkazového řádku Bicep verze 0.31.X jsou proměnné importované z jiných souborů Bicep přístupné v rámci uživatelem definovaných funkcí, stejně jako proměnné definované místně.
Předpokládejme, že máte soubor Bicep s názvem shared.bicep , který exportuje proměnnou:
// shared.bicep
@export()
var sharedPrefix = 'Contoso'
Tuto proměnnou můžete importovat do hlavního souboru Bicep a použít ji uvnitř uživatelem definované funkce:
import shared from './shared.bicep'
func makeResourceName(suffix string) string => '${shared.sharedPrefix}-${suffix}'
output resourceName string = makeResourceName('storage')
Výstup z předchozího příkladu je:
| Název | Typ | Hodnota |
|---|---|---|
| název zdroje | Řetězec | Contoso-úložiště |
Další informace o importu proměnných najdete v tématu Export proměnných, typů a funkcí.
Použití dekorátorů
Dekorátory jsou zapsány ve formátu @expression a jsou umístěny nad deklaracemi funkce. V následující tabulce jsou uvedeny dostupné dekorátory funkcí.
| Dekoratér | Důvod | Popis |
|---|---|---|
| popis | řetězec | Zadejte popisy funkce. |
| exportu | Žádná | Označuje, že funkce je k dispozici pro import jiným souborem Bicep. |
| metadata | objekt | Vlastní vlastnosti, které se mají použít pro funkci. Může obsahovat vlastnost popisu, která je ekvivalentní popis dekorátoru. |
Dekorátory jsou v oboru názvů sys. Pokud potřebujete odlišit dekorátor od jiné položky se stejným názvem, předkožte dekorátorem .sys Pokud například váš soubor Bicep obsahuje proměnnou s názvem description, musíte přidat obor názvů sys při použití dekorátoru popisu .
Popis
Pokud chcete přidat vysvětlení, přidejte popis k deklaraci funkce. Příklad:
@description('The say hello function.')
func sayHelloString(name string) string => 'Hi ${name}!'
Text ve formátu Markdown lze použít pro text popisu.
Vývoz
Slouží @export() ke sdílení funkce s jinými soubory Bicep. Další informace najdete v tématu Export proměnných, typů a funkcí.
Metadatové informace
Pokud máte vlastní vlastnosti, které chcete použít u uživatelem definované funkce, přidejte dekorátor metadat. V metadatech definujte objekt s vlastními názvy a hodnotami. Objekt, který definujete pro metadata, může obsahovat vlastnosti libovolného názvu a typu.
Tento dekorátor můžete použít ke sledování informací o funkci, která nemá smysl přidat do popisu.
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
type settings object
Když poskytnete @metadata() dekorátoru vlastnost, která je v konfliktu s jiným dekorátorem, má tento dekorátor vždy přednost před čímkoli v dekorátoru @metadata() . Konfliktní vlastnost v rámci @metadata() hodnoty je tedy redundantní a bude nahrazena. Další informace naleznete v tématu Žádné konfliktní metadata.
Další kroky
- Další informace o struktuře a syntaxi souborů Bicep najdete v tématu Vysvětlení struktury a syntaxe souborů Bicep.
- Seznam dostupných funkcí Bicep najdete v tématu Funkce Bicep.