scalabook

Форк
0
/
variables.md 
92 строки · 3.4 Кб

Параметры функции

Вернемся к примеру из предыдущего раздела:

val doubledInts = ints.map((i: Int) => i * 2)

Анонимной функцией является следующая часть: (i: Int) => i * 2

Причина, по которой она называется анонимной (anonymous), заключается в том, что она не присваивается переменной и, следовательно, не имеет имени.

Однако анонимная функция, также известная как функциональный литерал (function literal), может быть назначена переменной для создания функциональной переменной (function variable):

val double = (i: Int) => i * 2

Код выше создает функциональную переменную с именем double

. В этом выражении исходный литерал функции находится справа от символа =
, а новое имя переменной - слева. Список параметров функции подчеркнут:

val double = (i: Int) => i * 2
--------

Как и список параметров для метода, список параметров функции означает, что функция double

принимает один параметр с типом Int
и именем i
. Как можно видеть ниже, double
имеет тип Int => Int
, что означает, что он принимает один параметр Int
и возвращает Int
:

val double = (i: Int) => i * 2
// double: Int => Int = ...

Вызов метода

Функция double

может быть вызвана так:

val double = (i: Int) => i * 2
val x = double(2)
// x: Int = 4

double

также можно передать в вызов map
:

List(1, 2, 3).map(double)
// res0: List[Int] = List(2, 4, 6)

Кроме того, когда есть другие функции типа Int => Int

:

val triple = (i: Int) => i * 3

можно сохранить их в List

или Map
:

val functionList: List[Int => Int] = List(double, triple)
val functionMap: Map[String, Int => Int] = Map(
"2x" -> double,
"3x" -> triple
)

functionList

имеет тип List[Int => Int]
, functionMap
- Map[String, Int => Int]
.

Ключевые моменты

Ключевые моменты:

  • чтобы создать функциональную переменную, достаточно присвоить имя переменной функциональному литералу
  • когда есть функция, с ней можно обращаться как с любой другой переменной, то есть как со String
    или Int
    переменной

А благодаря улучшенной функциональности Eta Expansion в Scala 3 с методами можно обращаться точно так же.


Ссылки:

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.