我是Scala的新手,最近还在学习Currying。我知道什么是局部应用函数和局部应用函数。但是我不明白为什么要使用Currying而不是多个参数。所以任何人都可以通过提供一些例如currying来帮助我。
发布于 2018-05-13 04:04:07
假设您所说的"currying“是指具有多个参数列表的函数定义,那么最重要的两个优点是:
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}
在本例中,无需将类型归于s和i。
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 //无效的
所谓“部分应用的函数”,通常是这样的意思:
List(83,223,314,56,79).map(math.min(100, _))
// output: List(83, 100, 100, 56, 79)这里,数学函数min首先用于创建一个部分应用的函数min(100, _),然后将该函数传递给map以截断列表中所有大于100的数字。
如果你的意思是“部分应用的curried函数”,那么下面是一个curried函数的例子:
def min(x: Int)(y: Int) = x min y
List(83,223,314,56,79).map(min(100))正如您所看到的,curried版本甚至比通常的“部分应用函数”-version更短、更简洁。
我不知道该怎么说部分应用函数的“优点”,除了你可以使用它们,而不能使用它们是痛苦的。
https://stackoverflow.com/questions/50309993
复制相似问题