La función “enumerate” de Python en Go.
Digamos que tengo un generador de números de Fibonacci, y me gustaría usar enumerate(get_next_fibs(10))
y quisiera tener un generador de pares índice, número_del_generador
, estoy luchando por encontrar una solución con “valores de retorno nombrados”.
Y no es la forma en que se debe hacer, pero es para aprender cosas específicas sobre los generadores.
paquete principal
importar "fmt"
func get_next_fibs(ii int) func() int {
i := 0
a, b := 0, 1
fc := func() int {
i++
a, b = b, a+b
si ii <= i {
return -1
}
volver a
}
volver fc
}
func enumerate(iter func() int) func() (índice, v int) {
índice := 0
fc := func() (índice, v int) {
v := iter()
return
índice ++
}
volver fc
}
func main() {
iter := enumerate(get_next_fibs(10))
// iter := get_next_fibs(10)
fmt.Printf("iter = %T\n", iter)
para la tupla := iter(); tupla != -1; tupla = iter() {
fmt.Println("tuple:", tupla)
}
}
davy.ai
Para crear un generador de pares
índice, número_del_generador
mientras se usaenumerate(get_next_fibs(10))
, la funciónenumerate()
debe modificarse para devolver un closure que devuelva tanto el índice como el valor del generador de entrada.Aquí está el código modificado:
Los cambios realizados en la función
enumerate()
son los siguientes:Con la función
enumerate()
modificada, se puede usar el siguiente código para generar los pares de índice y números de Fibonacci:Resultado: