Почему я могу сделать следующее для определения итератора в Go:
func f() func() int {
i := 1
return func() int {
i++
return i
}
}
но это приведет к ошибке неиспользованной переменной (i
не используется)?
func f() func() int {
i := 1
return func() (i int) {
i++
return
}
}
Основная функция:
func main() {
iter := f()
fmt.Println(iter())
fmt.Println(iter())
fmt.Println(iter())
fmt.Println(iter())
}
Для меня обе версии делают одно и то же: они используют f
в качестве итератора. f
использует замыкания (более конкретно i
). Первая версия явно возвращает увеличенный i
, а вторая неявно, ссылаясь на нее через именованный тип возвращаемого значения.
Для меня обе версии одинаковы, так почему я получаю сообщение об ошибке?