首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Currying和Partial函数的真实示例

Currying和Partial函数的真实示例
EN

Stack Overflow用户
提问于 2018-05-13 03:32:48
回答 1查看 519关注 0票数 0

我是Scala的新手,最近还在学习Currying。我知道什么是局部应用函数和局部应用函数。但是我不明白为什么要使用Currying而不是多个参数。所以任何人都可以通过提供一些例如currying来帮助我。

EN

回答 1

Stack Overflow用户

发布于 2018-05-13 04:04:07

假设您所说的"currying“是指具有多个参数列表的函数定义,那么最重要的两个优点是:

  1. 更好的类型推断:以前参数列表中的参数类型可以用于以后参数列表中参数的类型推断。这在这里起作用:

defΔA(f:a => A):a= f(x)Δ(5)(x => x)

但这里没有:

def fooA:a= f(x) foo(5,x => x) //错误:缺少参数类型

最突出的例子可能是列表上的fold

val a= List(1,2,3) a.foldLeft("List:"){ (s,i) => s+“”+i}

在本例中,无需将类型归于si

  • 您可以使用先前参数列表中的变量来定义默认参数:

def (x: Int)(y: Int,z: Int =x* x) =x+y*z //有效f(2)(3) // works def g(x: Int,y: Int,z: Int =x* x) =x+y*z //无效的

所谓“部分应用的函数”,通常是这样的意思:

代码语言:javascript
复制
List(83,223,314,56,79).map(math.min(100, _))
// output: List(83, 100, 100, 56, 79)

这里,数学函数min首先用于创建一个部分应用的函数min(100, _),然后将该函数传递给map以截断列表中所有大于100的数字。

如果你的意思是“部分应用的curried函数”,那么下面是一个curried函数的例子:

代码语言:javascript
复制
def min(x: Int)(y: Int) = x min y
List(83,223,314,56,79).map(min(100))

正如您所看到的,curried版本甚至比通常的“部分应用函数”-version更短、更简洁。

我不知道该怎么说部分应用函数的“优点”,除了你可以使用它们,而不能使用它们是痛苦的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50309993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档