Java是否支持Currying?
|
我想知道是否有任何方法可以在Java中实现。我认为没有本地支持闭包是不可能的。
没有找到相关结果
已邀请:
15 个回复
勘掸府迫路
...这非常好。就个人而言,有了Java 8,我几乎没有理由使用替代的JVM语言(例如Scala或Clojure)。当然,它们提供了其他语言功能,但这不足以证明过渡成本和IDE /工具/库支持IMO的不足。
痰降锭骂奸
FWIW这是上述Java代码的Haskell等效项:
购藏盗码韦
消费者也可以使用“咖喱”。例如,要返回具有3个参数的方法,而其中2个已应用的参数,我们会执行类似的操作
Java文档
蜂佬渺
渴翅吮斡撤
现在让我们进行简单的划分。我们需要一个分频器:
和DivideFunction:
现在我们可以做一个咖喱师:
死簇
示例;-)。 下面的测试展示了这两种情况,将ѭ10变成ѭ11:
以及部分应用程序,尽管在此示例中它不是真正的类型安全的:
这取自我刚刚在JavaOne明天明天一个小时内就出于娱乐目的实现的概念验证“因为我很无聊” ;-)代码可在此处获得:https://github.com/ktoso/jcurry 一般的想法可以相对容易地扩展到FunctionN => FunctionM,尽管“真实类型安全性”对于partia应用程序示例仍然是一个问题,而currying的示例在jcurry中将需要大量的样板代码,但是可行的。 总而言之,这是可行的,但是在Scala中,它是开箱即用的;-)
响摔衅幸
坍锭嘉韭蓝
您还可以定义如下的实用程序方法:
这可以使您的语法更具可读性:
阀傻
讹巳漓把备
那么你可以通过这种方式来实现
俺呵誓放胳
这是一个简单的示例,其中curriedAdd是一个curried函数,它返回另一个函数,并且它可以用于部分存储应用在curried中的参数,curried本身就是一个函数。现在,当我们在屏幕上打印时,此功能将在以后完全应用。 此外,稍后您将看到如何在JS样式中使用它
校勒魏寡
眠缝
肉脓措伪
苦诫