Closed. This question needs to be more focused。它当前不接受答案。
想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。
3年前关闭。
Improve this question
我对函数式编程世界还很陌生。尝试使用Java 8附带的新函数式编程。最近,我逐渐了解了currying和方法组成。了解使用Java进行功能样式编程的真正实质非常困难,现在我有两个问题,但是,在提出所有这些问题之前,我已经在python上尝试了相同的方法,现在对一些核心概念已经有点熟悉。
1.在java中,Currying和方法组成有何不同实际上,我一点也没有看到任何区别,尤其是在阅读了这篇文章之后
2.作为一个编程语言(从我的Java编程角度来看),我为什么更喜欢使用curring。例如为什么我要这样做
用 Currying使用单个函数 而组合将采用两个函数
举一个简单的例子:
为什么要使用currying?
例如,Java实例方法是相当相似的过程的结果。实例方法与静态方法的不同之处在于它们具有一个额外的隐藏参数
这并非完全是巧合,因为纯函数语言只能具有其输出仅取决于其输入的函数(与OO语言相反,在OO语言中,方法的输出也可能取决于该方法所属的对象的内部状态) )
作为一般建议,如果您想学习函数式编程的精髓,最好不要使用Java。甚至也不来自Scala。尝试从像Haskell这样的纯函数式语言中学习它,然后您可以回到Java并更好地了解在其中实现了FP的哪些子集以及如何实现。
想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。
3年前关闭。
Improve this question
我对函数式编程世界还很陌生。尝试使用Java 8附带的新函数式编程。最近,我逐渐了解了currying和方法组成。了解使用Java进行功能样式编程的真正实质非常困难,现在我有两个问题,但是,在提出所有这些问题之前,我已经在python上尝试了相同的方法,现在对一些核心概念已经有点熟悉。
1.在java中,Currying和方法组成有何不同实际上,我一点也没有看到任何区别,尤其是在阅读了这篇文章之后
2.作为一个编程语言(从我的Java编程角度来看),我为什么更喜欢使用curring。例如为什么我要这样做
用
f(x){ return g(y) }
代替f(x,y){ return x(y)}
有什么区别? 最佳答案
虽然这两个操作都输出一个函数,但是该示例使区别非常清楚:
f()
并生成一个“中间”函数f'()
,该函数与f()
相同,但某些参数已经固定。当您最终填写其余参数时,将评估原始的f()
。 f()
和g()
,并创建一个完全不同的函数g(f())
。 举一个简单的例子:
f(x,y) = x+y
,其中x
和y
是整数。该函数的数量和组合的使用都不会导致该函数返回非整数结果。但是用g(x) = x/2
组成它,您会得到g(f(x,y)) = (x+y)/2
,它当然会很高兴地返回非整数。为什么要使用currying?
例如,Java实例方法是相当相似的过程的结果。实例方法与静态方法的不同之处在于它们具有一个额外的隐藏参数
this
。说new Foo()
时,实际上是将此隐藏参数绑定(bind)到新创建的Foo
对象。因此,不必调用函数void bar(Foo this, int x)
,您只需将其称为void bar(int x)
即可,并且第一个参数已经固定。 (顺便说一下,void bar(Foo this, int x)
实际上是完全有效的Java语法,我们几乎从未使用过它。)这并非完全是巧合,因为纯函数语言只能具有其输出仅取决于其输入的函数(与OO语言相反,在OO语言中,方法的输出也可能取决于该方法所属的对象的内部状态) )
作为一般建议,如果您想学习函数式编程的精髓,最好不要使用Java。甚至也不来自Scala。尝试从像Haskell这样的纯函数式语言中学习它,然后您可以回到Java并更好地了解在其中实现了FP的哪些子集以及如何实现。
关于Java 8函数样式编程currying和函数组合有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45398362/