Wenn Sie es betrachten IntFunction, könnte es klarer werden: IntFunction<R>ist a FunctionalInterface. Es stellt eine Funktion dar, die inteinen Wert vom Typ annimmt und zurückgibt R.
In diesem Fall ist der Rückgabetyp Rauch 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, curriedAddsoll eine Funktion zurückgegeben werden, die wieder ein übernimmt int(und wieder zurückgibt int, weil dies der IntUnaryOperatorFall ist).
In der funktionalen Programmierung ist es üblich, den Typ einer Funktion als zu schreiben, param -> return_valueund genau das sehen Sie hier. So ist die Art von curriedAddist 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 + bist eine Funktion, die einen einzelnen Parameter verwendet bund einen Wert (die Summe) zurückgibt. λa λb a + bist eine Funktion, die einen einzelnen Parameter akzeptiert und eine aandere Funktion eines einzelnen Parameters zurückgibt. λa λb a + bkehrt λb a + bmit aauf den Parameterwert gesetzt zurück.