В основном на разных языках, таких как Python, Ruby, C ++, Javascript, Groovy и т. Д., Вы можете установить временную переменную в лямбде (особенно если она итеративна), которая хранит временное значение для каждой итерации в лямбда-выражении.В некоторых языках (например, Groovy) для этой переменной есть имя по умолчанию, или вы можете установить его самостоятельно (т. Е. Имя переменной по умолчанию в Groovy - it
).Например, в Groovy у нас есть:
strings.each() {
print it
}
напечатает содержимое присваивания переменной string
(при условии, что оно может быть преобразовано в String).Следующий код имеет точно такую же функциональность:
strings.each() { a_string ->
print a_string
}
, где мы явно назвали временную переменную как a_string
.Это аналогично аргументу iterator
в вашем вопросе.Итак, в Terraform мы видим пример в документации :
resource "aws_security_group" "example" {
name = "example" # can use expressions here
dynamic "ingress" {
for_each = var.service_ports
content {
from_port = ingress.value
to_port = ingress.value
protocol = "tcp"
}
}
}
Согласно документации:
Если опущено, имя переменной по умолчаниюна метку динамического блока
и имя выше ingress
(обратите внимание, что это метка, указанная рядом с блоком dynamic
).Конечно же, мы видим имя временной переменной выше ingress
, и к ней обращаются через ingress.value
.Чтобы использовать функциональность iterator
для переименования этой временной переменной, мы можем сделать что-то вроде следующего.
resource "aws_security_group" "example" {
name = "example" # can use expressions here
dynamic "ingress" {
for_each = var.service_ports
iterator = "service_port"
content {
from_port = service_port.value
to_port = service_port.value
protocol = "tcp"
}
}
}
переименовывая временную переменную, хранящую элемент var.service_ports
в каждой итерации в лямбда-выражении изимя по умолчанию от ingress
до service_port
.Основное добавленное значение, которое я вижу в этом (и аналогично, когда я использую его в Groovy для библиотек Jenkins Pipeline), заключается в предоставлении более четкого имени для временной переменной, в которой хранится значение, для улучшения читабельности.