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

Литерал функции параметром функции в Go

Параметр функции может принимать другую функцию. Для этого у параметра указывают тип func с тем же списком аргументов и результатом. Внутри функции такой аргумент вызывают как обычную функцию:

package main import "fmt" func applyTwice(value int, fn func(int) int) int { first := fn(value) return fn(first) } func main() { add1 := func(n int) int { return n + 1 } fmt.Println(applyTwice(3, add1)) // выведет 5 }

Литерал без аргументов подходит для отложенного действия. Функция может вызвать переданный блок один или несколько раз:

package main import "fmt" func runSafe(fn func()) { fmt.Println("begin") fn() fmt.Println("end") } func main() { work := func() { fmt.Println("work") } runSafe(work) }

Литерал с результатом bool удобен для проверки значения:

package main import "fmt" func checkValue(n int, fn func(int) bool) bool { return fn(n) } func main() { even := func(n int) bool { return n % 2 == 0 } fmt.Println(checkValue(8, even)) // выведет true }

Напишите функцию combine с двумя целыми и параметром типа func(int, int) int. Функция возвращает результат литерала для этих чисел. Выведите результат для 6 и 7 так, чтобы вернулось их произведение.

Напишите функцию repeatAction: целое times и параметр типа func(). Тело литерала должно выполниться столько раз, сколько задано в times. Проверьте выводом строки "tick" три раза.

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