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

Замыкание литерала функции в Go

Литерал можно записать внутри другой функции. Тело литерала читает локальные переменные этой функции - не только собственные параметры. При вызове используется текущее значение такой переменной:

package main import "fmt" func main() { base := 10 addBase := func(x int) int { return x + base } fmt.Println(addBase(5)) // выведет 15 }

Одно число снаружи удобно задавать шаг или смещение для короткого литерала:

package main import "fmt" func buildScale() func(int) int { step := 3 return func(x int) int { return x * step } } func main() { scale := buildScale() fmt.Println(scale(4)) // выведет 12 }

Строку из окружения можно подставить в результат без отдельного параметра литерала:

package main import "fmt" func main() { tag := "id" label := func(num int) string { return tag + ": " + fmt.Sprintf("%d", num) } fmt.Println(label(7)) // выведет id: 7 }

Внутри main задайте limit равным 50. Запишите литерал с целым параметром, который возвращает меньшее из аргумента и limit. Выведите результат для 80.

Внутри main задайте строку "go". Запишите литерал без параметров, который возвращает эту строку. Выведите два вызова подряд.

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