Wenn Sie es betrachten IntFunction
, könnte es klarer werden: IntFunction<R>
ist a FunctionalInterface
. Es stellt eine Funktion dar, die int
einen Wert vom Typ annimmt und zurückgibt R
.
In diesem Fall ist der Rückgabetyp R
auch a FunctionalInterface
, nämlich an IntUnaryOperator
. Die erste (äußere) Funktion selbst gibt also eine Funktion zurück.
In diesem Fall: Wenn auf ein angewendet int
, curriedAdd
soll eine Funktion zurückgegeben werden, die wieder ein übernimmt int
(und wieder zurückgibt int
, weil dies der IntUnaryOperator
Fall ist).
In der funktionalen Programmierung ist es üblich, den Typ einer Funktion als zu schreiben, param -> return_value
und genau das sehen Sie hier. So ist die Art von curriedAdd
ist int -> int -> int
(oder , int -> (int -> int)
wenn Sie so besser).
Die Lambda-Syntax von Java 8 geht damit einher. Um eine solche Funktion zu definieren, schreiben Sie
a -> b -> a + b
Das ist dem tatsächlichen Lambda-Kalkül sehr ähnlich:
λa λb a + b
λb a + b
ist eine Funktion, die einen einzelnen Parameter verwendet b
und einen Wert (die Summe) zurückgibt. λa λb a + b
ist eine Funktion, die einen einzelnen Parameter akzeptiert und eine a
andere Funktion eines einzelnen Parameters zurückgibt. λa λb a + b
kehrt λb a + b
mit a
auf den Parameterwert gesetzt zurück.