网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

scala的柯里化是什么

本篇内容介绍了“scala的柯里化是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的新密网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

方法可以定义多个参数列表,当使用较少的参数列表调用多参数列表的方法时,会产生一个新的函数,该函数接收剩余的参数列表作为其参数。这被称为柯里化。

下面是一个例子,在Scala集合 trait TraversableOnce 定义了 foldLeft

def foldLeft[B](z: B)(op: (B, A) => B): B

foldLeft从左到右,以此将一个二元运算op应用到初始值z和该迭代器(traversable)的所有元素上。以下是该函数的一个用例:

从初值0开始, 这里 foldLeft 将函数 (m, n) => m + n 依次应用到列表中的每一个元素和之前累积的值上。

val numbers = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)val res = numbers.foldLeft(0)((m, n) => m + n)print(res)

多参数列表有更复杂的调用语法,因此应该谨慎使用,建议的使用场景包括:

单一的函数参数

在某些情况下存在单一的函数参数时,例如上述例子foldLeft中的op,多参数列表可以使得传递匿名函数作为参数的语法更为简洁。如果不使用多参数列表,代码可能像这样:

numbers.foldLeft(0, {(m: Int, n: Int) => m + n})

注意使用多参数列表时,我们还可以利用Scala的类型推断来让代码更加简洁(如下所示),而如果没有多参数列表,这是不可能的。

numbers.foldLeft(0)(_ + _)

像上述语句这样,我们可以给定多参数列表的一部分参数列表(如上述的z)来形成一个新的函数(partially applied function),达到复用的目的,如下所示:

val numbers = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)val numberFunc = numbers.foldLeft(List[Int]())_
val squares = numberFunc((xs, x) => xs:+ x*x)print(squares.toString())
val cubes = numberFunc((xs, x) => xs:+ x*x*x)print(cubes.toString())

最后,foldLeftfoldRight 可以按以下任意一种形式使用,

val numbers = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
numbers.foldLeft(0)((sum, item) => sum + item) numbers.foldRight(0)((sum, item) => sum + item)
numbers.foldLeft(0)(_+_) numbers.foldRight(0)(_+_)
(0 /: numbers)(_+_) (numbers :\ 0)(_+_)
隐式(implicit)参数

如果要指定参数列表中的某些参数为隐式(implicit),应该使用多参数列表。例如:

def execute(arg: Int)(implicit ec: ExecutionContext) = ???
 
推荐阅读:  
9.scala嵌套方法  
 
8.scala高阶函数  
 
7.通过混入(mixin)来组合类      

“scala的柯里化是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


网站题目:scala的柯里化是什么
标题URL:http://bjjierui.cn/article/jeijsc.html

其他资讯