cpp

Анонимные функции

Функция может вообще не иметь названия. В этом случае ссылку на анонимную функцию сохраняют в переменной:

var <Переменная>[ func([<Типы параметров>])[ <Тип результата>]] = 
   func([<Название параметра 1> <Тип>
        [, ..., <Название параметра N> <Тип>]])[ <Тип результата>] {
      <Тело функции>
      [return[ <Возвращаемое значение>]]
   }

Пример создания анонимной функции и ее вызова:

// Присваиваем ссылку на анонимную функцию
var f func(int, int) int = func(x int, y int) int {
   return x + y
}
// Вызываем анонимную функцию через переменную f
fmt.Println(f(40, 20)) // 60

Анонимная функция становится видимой только после определения. Если вызов функции поместить перед определением, то будет выведено сообщение об ошибке.

Ссылку на вложенную функцию можно вернуть в качестве значения в операторе return. Чтобы вызвать вложенную функцию, круглые скобки указываются два раза:

// Присваиваем ссылку на анонимную функцию
var f func() func() = func() func() {
   return func() { // Возвращаем ссылку на вложенную функцию
      fmt.Println("Это вложенная функция")
   }
}
f()() // Вызываем вложенную функцию через переменную f

Анонимную функцию удобно использовать, когда в качестве значения параметра ожидается передача ссылки на функцию (листинг 10.14).

Листинг 10.14. Передача в функцию анонимной функции

package main

import "fmt"

func main() {
   fmt.Println(test(40, 20, func(x, y int) int {
      return x + y
   })) // 60
   fmt.Println(test(40, 20, func(x, y int) int {
      return x - y
   })) // 20
}
func test(x, y int, f func(int, int) int) int {
   return f(x, y)
}

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Реквизиты

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp