我在看地图和物体的区别。我的理解是这样的:
只要所有元素都是同一类型,地图就可以包含任何类型
variable "project_defaults" {
type = map(string)
default = {
project = "example_project"
region = "eu-west-1"
}
}
一个对象包含命名属性,每个属性都有自己的类型
variable "s3_buckets" {
type = object({
name = string
versioning = bool
s3_rules = list(map(any))
})
description = "List of maps for S3 buckets"
}
我看过使用
map(object)
的示例,但我真的不确定与object
类型相比有什么区别
variable "s3_buckets" {
type = map(object({
name = string
versioning = bool
s3_rules = list(map(any))
}))
description = "List of maps for S3 buckets"
}
我试图弄清楚何时使用
map(object)
而不是使用 object
。在语法方面,它们看起来非常相似,但不确定何时使用它们的实际场景。
Map 可以包含任何类型,只要所有元素都是同一类型即可。如果我有一个只有字符串的映射并且想为任何资源配置使用这些值,这将是有意义的。
对象类型的模式是
{ <KEY> = <TYPE>, <KEY> = <TYPE>, ... }
——一对花括号包含一系列以逗号分隔的<KEY> = <TYPE>
对。与对象类型匹配的值必须包含所有指定的键,并且每个键的值必须与其指定的类型匹配。如果在创建资源时需要遵循对象模式的特定结构,这将有意义。
需要注意的一点是,如果映射(或更大的对象)至少具有对象模式所需的键,则可以将其转换为对象。转换期间会丢弃任何其他属性,这意味着
map -> object
地图转换可能是有损的。