Java 8 部分函数应用/柯里化(Currying)

标签 java lambda currying partial-application

 public static <T, U, R> Function<U, R> partial(BiFunction<T, U, R> f, T x) {
        return (y) -> f.apply(x, y);
    }

在上面的表达式中,我可以理解函数partial 返回另一个函数,Function<U, R> .那Function<U, R>本身返回 R 的值。其余的是什么 static <T, U, R>代表?我的意思是如果 Function<U, R>返回一个 R 与 <T, U, R> 有什么关系? ?

最佳答案

(我知道这在 Java 术语中在技术上是不正确的,但我将在下面说“参数”,我指的是“形式参数”,因为到处混合使用“形式参数”和“类型参数”会造成混淆。 )

Tx 的类型参数争论。

partial接受两个参数:

  • f , 一个接受 T 的函数和一个 U并返回 R :
    BiFunction<T, U, R> f

  • x , 类型为 T :
    T x

partial返回一个只接受 U 的新函数(不是 TU )并返回 R .而不是期待 T参数,新函数使用 x提供给partial打电话时 f .

简而言之:它返回一个新函数,其中第一个参数(类型为 T )已通过 partial部分应用(柯里化(Currying))。的 x争论。

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

关于Java 8 部分函数应用/柯里化(Currying),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36545436/

相关文章:

java - 快速音频文件输出

java - 如何从android中的自定义 ListView 中选择具有id的 TextView ?

java - 更新 Android 应用中的原始资源

java - 在哪里计算 Java 8 lambda 表达式?

java - 收集参数以应用于 Java/Scala 中的柯里化(Currying)函数

clojure - 是否有可能对 Lisp 家族语言实现自动柯里化(Currying)?

java - 无法实现 Parcelable,因为我无法将 CREATOR 字段设为静态

ruby-on-rails - 在 Rails ActiveRecord 测试套件中使用 Ruby 1.9 lambda 文字感到困惑

C# lambda IN 子句错误

scala - 为什么 Scala 在分配给 val 时需要部分应用柯里化(Currying)函数?