Clausuras en Go
Un valor función captura las variables que usa, no sus valores.
func counter(start int) func() int {
count := start
return func() int {
count++
return count
}
}
func adders() []int {
var funcs []func() int
for i := 1; i <= 3; i++ {
funcs = append(funcs, func() int { return i * 10 })
}
var out []int
for _, f := range funcs {
out = append(out, f())
}
return out
}
Cómo funciona
- Cada llamada a la función externa recibe su propio estado capturado.
- Devolver una clausura es como Go escribe un contador o un generador.
- Desde Go 1.22 cada iteración del bucle tiene su propia variable.
Palabras clave y builtins usados aquí
appendforfuncintrangereturnvar
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 301
- Tokens
- 99
- Ritmo de tres estrellas
- 90 tpm
Al ritmo de tres estrellas de 90 tokens por minuto, este intento toma unos 66 segundos.
Paso 3 de 6 en Funciones; paso 12 de 30 en Fundamentos del lenguaje.