Якщо ви подивитесь, IntFunction
це може стати зрозумілішим: IntFunction<R>
це a FunctionalInterface
. Він являє собою функцію, яка приймає int
і повертає значення типу R
.
У цьому випадку тип повернення R
є також а FunctionalInterface
, а саме - an IntUnaryOperator
. Отже перша (зовнішня) функція сама повертає функцію.
У цьому випадку: При застосуванні до int
, curriedAdd
повинна повертати функцію , яка знову приймає int
(і повертається знову int
, тому що це те , що IntUnaryOperator
робить).
У функціональному програмуванні прийнято записувати тип функції як, param -> return_value
і саме ви це бачите тут. Отже, тип curriedAdd
є int -> int -> int
(або int -> (int -> int)
якщо вам це більше подобається).
Ламбда-синтаксис Java 8 йде разом із цим. Щоб визначити таку функцію, ви пишете
a -> b -> a + b
що дуже схоже на фактичне обчислення лямбда:
λa λb a + b
λb a + b
- це функція, яка приймає один параметр b
і повертає значення (суму). λa λb a + b
це функція, яка приймає один параметр a
і повертає іншу функцію одного параметра. λa λb a + b
повертається λb a + b
із a
заданим значенням параметра.