Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpIrSt 100 of 280 menu
◀ ▶

Останов итератора из цикла в Go

Выход из цикла останавливает и сам итератор, если он проверяет ответ шага. Команда прерывания внутри range сообщает рантайму, что перебор больше не нужен, и следующий вызов yield получает ложь.

Итератор, который после каждого значения смотрит на результат yield, обрывает работу и не зовет шаг снова. Без такой проверки цикл формально мог бы попросить еще элементы, но типичная запись с if !yield(v) { return } связывает выход из range с остановкой последовательности.

На экране только 5 и 4. После break итератор не дойдет до 3, хотя внутренний цикл еще мог бы продолжаться.

Обратный счет прервем после первых двух чисел:

package main import "fmt" func CountDown(n int) func(func(int) bool) { return func(yield func(int) bool) { for i := n; i > 0; i-- { if !yield(i) { return } } } } func main() { for v := range CountDown(5) { fmt.Println(v) if v == 4 { break } } }

Дан следующий код:

for v := range CountDown(6) { fmt.Println(v) if v == 3 { break } }

Перечислите значения v, которые успеют напечататься.

Дан следующий фрагмент итератора:

for i := 1; i <= 10; i++ { if !yield(i) { return } }

Скажите, что произойдет с циклом перебора, если в теле range сработает break на значении 4.

Дано число:

top := 8

Переберите обратный счет до top и остановите цикл, как только напечатаете 3 значения.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить