Currying,部分应用程序和功能分解是相同的概念吗?它们之间有什么区别吗?

我在阅读这些内容,发现它们相同。他们之间是否有任何区别,我不明白。
当您可以一次性将所有参数传递给单个方法时,为什么还要用Java编写这样的代码?

 Function<Integer,Function<Integer,Function<Integer, Integer> > >
        triadder = u -> w -> v -> u + w + v;

    // Calling the curried functions

    // Calling Curried Function for Adding u, v & w
    System.out.println("Add 2, 3, 4 :"
                       + triadder
                             .apply(2)
                             .apply(3)
                             .apply(4));

最佳答案

Java不太适合这种方法。其他语言使其更容易。在Java中,面向对象是必经之路,函数式编程思想仅在确实需要它的特定情况下才加分。

“部分application”是比currying更通用的概念。这意味着提供一个在其闭包中保存一些数据的函数-调用方提供另一个参数。

可以将其与Java对象“捕获”一个字段,然后提供使用该字段以及另一个参数的方法进行比较。

“ Curing”更具体地将多参数功能重构为一个参数的功能。通过捕获除一个参数外的所有参数,将其他参数留给以后的调用来完成。

“功能分解”是将复杂过程分解为简单功能的分析,这些功能等同于面向对象设计的功能编程。

09-10 03:34
查看更多