Java 8 部分函数应用/currying
Java 8 partial function application /currying
public static <T, U, R> Function<U, R> partial(BiFunction<T, U, R> f, T x) {
return (y) -> f.apply(x, y);
}
在上面的表达式中,我可以理解函数 partial returns 另一个函数 Function<U, R>
。那 Function<U, R>
本身 returns 是 R 的一个值。其余的 static <T, U, R>
代表什么?我的意思是如果 Function<U, R>
returns 一个 R 与 <T, U, R>
有什么关系?
(我知道 Java 术语在技术上是不正确的,但我会在下面说 "argument" 我的意思是 "formal parameter" 因为混合 "formal parameter" 和 "type parameter" 处处令人困惑。)
T
是 x
参数的类型参数。
partial
接受两个参数:
f
,一个接受T
和U
以及returns和R
的函数:
BiFunction<T, U, R> f
x
,类型为T
:
T x
partial
returns 一个新函数,只接受 U
(不是 T
和 U
)和 returns R
。在调用 f
.
时,新函数不使用 T
参数,而是使用提供给 partial
的 x
简而言之:它 returns 一个新函数,其中第一个参数(T
类型)已通过 部分应用(柯里化) partial
的 x
参数。
我们在声明开头附近有 <T, U, R>
的原因是 Java 语法让我们指定 partial
是一个泛型方法,使用类型参数 T
、U
和 R
(否则,它们看起来像类型 names,而不是类型 parameters)。
public static <T, U, R> Function<U, R> partial(BiFunction<T, U, R> f, T x) {
return (y) -> f.apply(x, y);
}
在上面的表达式中,我可以理解函数 partial returns 另一个函数 Function<U, R>
。那 Function<U, R>
本身 returns 是 R 的一个值。其余的 static <T, U, R>
代表什么?我的意思是如果 Function<U, R>
returns 一个 R 与 <T, U, R>
有什么关系?
(我知道 Java 术语在技术上是不正确的,但我会在下面说 "argument" 我的意思是 "formal parameter" 因为混合 "formal parameter" 和 "type parameter" 处处令人困惑。)
T
是 x
参数的类型参数。
partial
接受两个参数:
f
,一个接受T
和U
以及returns和R
的函数:BiFunction<T, U, R> f
x
,类型为T
:T x
partial
returns 一个新函数,只接受 U
(不是 T
和 U
)和 returns R
。在调用 f
.
T
参数,而是使用提供给 partial
的 x
简而言之:它 returns 一个新函数,其中第一个参数(T
类型)已通过 部分应用(柯里化) partial
的 x
参数。
我们在声明开头附近有 <T, U, R>
的原因是 Java 语法让我们指定 partial
是一个泛型方法,使用类型参数 T
、U
和 R
(否则,它们看起来像类型 names,而不是类型 parameters)。