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

Перебор функции в Go

В цикл можно отдать функцию, которая сама вызывает переданный ей шаг. Такую функцию называют итератором: она получает шаг с одним значением и возвращает признак, нужно ли продолжать.

Сигнатура итератора для целых чисел выглядит как функция, принимающая шаг yield типа func(int) bool. Пока шаг возвращает истину, итератор зовет его снова с очередным числом. Ложный ответ останавливает перебор.

На экране по строке 1, 2 и 3. Внешняя запись возвращает функцию шага, а цикл перебора сам создает yield и передает его итератору.

Напишем короткую последовательность из трех чисел и выведем ее через цикл:

package main import "fmt" func Three() func(func(int) bool) { return func(yield func(int) bool) { if !yield(1) { return } if !yield(2) { return } if !yield(3) { return } } } func main() { for n := range Three() { fmt.Println(n) } }

Дано число:

n := 0

Опишите итератор на три целых 10, 20 и 30 и выведите их через цикл перебора.

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

func One() func(func(int) bool) { return func(yield func(int) bool) { yield(7) } }

Скажите, сколько строк выведет цикл перебора этой последовательности.

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

return func(yield func(int) bool) { if !yield(5) { return } yield(6) }

Скажите, вызовется ли шаг со значением 6, если шаг для 5 вернет ложь.

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