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" 处处令人困惑。)

Tx 参数的类型参数。

partial 接受两个参数:

  • f,一个接受TU以及returns和R的函数:
    BiFunction<T, U, R> f

  • x,类型为T:
    T x

partial returns 一个新函数,只接受 U(不是 TU)和 returns R。在调用 f.

时,新函数不使用 T 参数,而是使用提供给 partialx

简而言之:它 returns 一个新函数,其中第一个参数(T 类型)已通过 部分应用(柯里化) partialx 参数。

我们在声明开头附近有 <T, U, R> 的原因是 Java 语法让我们指定 partial 是一个泛型方法,使用类型参数 TUR(否则,它们看起来像类型 names,而不是类型 parameters)。