Bicep 中的使用者定義函式
在您的 Bicep 檔案內,您可以建立自己的函式。 這些函式可供您在 Bicep 檔案中使用。 使用者定義函式與 Bicep 檔案中自動提供的標準 Bicep 函式不同。 若您有在 Bicep 檔案中重複使用的複雜運算式,請建立您自己的函式。 使用使用者定義函式會自動啟用 語言 2.0 版程式代碼產生。
需要 Bicep CLI 0.26.X 版或更高版本才能使用此功能。
限制
定義使用者函式時有若干限制:
定義函式
您可以使用 func
陳述式來定義使用者定義的函式。
@<decorator>(<argument>)
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 | String | https://microsoft.com/azure |
greetingArray | 陣列 | ["Hi Evie!","Hi Casper!"] |
greetingObject | Object | {"hello":"Hi John!"} |
nameArray | 陣列 | ["John"] |
addNameArray | 陣列 | ["Mary","Bob","John"] |
使用 Bicep CLI version 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 |
使用裝飾項目
裝飾項目是以 @expression
格式撰寫的,放置於函式宣告上方。 下表顯示函式的可用裝飾項目。
裝飾項目 | Argument | 描述 |
---|---|---|
description | 字串 | 提供函式的描述。 |
export | none | 表示函式可供其他 Bicep 檔案匯入。 |
中繼資料 | object | 要套用至函式的自訂屬性。 可以包含相當於描述裝飾項目的描述屬性。 |
裝飾項目在 sys 命名空間中。 如果您需要區別裝飾項目與具有相同名稱的另一個項目,請在裝飾項目前面加上 sys
。 例如,如果您的 Bicep 檔案包含名為 description
的變數,則在使用描述裝飾項目時,您必須新增 sys 命名空間。
描述
若要新增說明,請將描述新增至函式宣告。 例如:
@description('The say hello function.')
func sayHelloString(name string) string => 'Hi ${name}!'
Markdown 格式的文字可用於描述文字。
Export
使用 @export()
與其他 Bicep 檔案共用函式。 如需詳細資訊,請參閱匯出變數、類型和函式。
中繼資料
如果您有自訂屬性要套用至使用者定義的函式,請新增中繼資料裝飾項目。 在中繼資料內,使用自訂名稱和值定義物件。 您為中繼資料定義的物件可以包含任何名稱和類型的屬性。
您可以使用此裝飾項目,追蹤對於新增至描述並無意義之函式的相關資訊。
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
type settings object
若您提供的 @metadata()
裝飾項目含有的屬性與另一個裝飾項目衝突,該裝飾項目一律優先於 @metadata()
裝飾項目中任何元素, 因此 @metadata()
值中的衝突屬性會變成多餘的,並受到取代。 如需詳細資訊,請參閱沒有衝突的中繼資料 (機器翻譯)。
下一步
- 若要了解 Bicep 檔案結構和語法,請參閱了解 Bicep 檔案的結構和語法。
- 如需可用 Bicep 函式的清單,請參閱 Bicep 函式。