Java 支持 Currying 吗?

新手上路,请多包涵

我想知道是否有任何方法可以在 Java 中提取它。我认为没有对闭包的原生支持是不可能的。

原文由 user855 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 328
1 个回答

Java 8(2014 年 3 月 18 日发布)支持柯里化。 missingfaktor 在答案 中发布的示例 Java 代码可以重写为:

 import java.util.function.*;
import static java.lang.System.out;

// Tested with JDK 1.8.0-ea-b75
public class CurryingAndPartialFunctionApplication
{
   public static void main(String[] args)
   {
      IntBinaryOperator simpleAdd = (a, b) -> a + b;
      IntFunction<IntUnaryOperator> curriedAdd = a -> b -> a + b;

      // Demonstrating simple add:
      out.println(simpleAdd.applyAsInt(4, 5));

      // Demonstrating curried add:
      out.println(curriedAdd.apply(4).applyAsInt(5));

      // Curried version lets you perform partial application:
      IntUnaryOperator adder5 = curriedAdd.apply(5);
      out.println(adder5.applyAsInt(4));
      out.println(adder5.applyAsInt(6));
   }
}

… 这很好。就个人而言,随着 Java 8 的推出,我认为没有理由使用 Scala 或 Clojure 等替代 JVM 语言。当然,它们提供了其他语言特性,但这还不足以证明转换成本和较弱的 IDE/工具/库支持 IMO 是合理的。

原文由 Rogério 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏