Что выведет код Senior Дженерики обновлено
Что выведет Go: итератор iter.Seq и break
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.
package main
import (
"fmt"
"iter"
)
func Count(n int) iter.Seq[int] {
return func(yield func(int) bool) {
for i := range n {
if !yield(i) {
fmt.Println("stop at", i)
return
}
}
fmt.Println("done")
}
}
func main() {
for v := range Count(5) {
if v == 2 {
break
}
fmt.Println(v)
}
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 0, 1, stop at 2. С Go 1.23 range умеет ходить по функциям-итераторам.
Что выведет
0
1
stop at 2
Разбор
С Go 1.23 range умеет ходить по функциям-итераторам. Тело цикла превращается в функцию yield. На v = 2 срабатывает break, yield возвращает false, итератор видит это, печатает stop at 2 и выходит. До done дело не доходит.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.