当前位置: 首页 / 技术干货 / 正文
好程序员大数据培训技术分享Scala系列之柯里化

2019-11-20

BigData 大数据培训 好程序员 Scala

  好程序员大数据培训技术分享Scala系列之柯里化,柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,

并且返回接受余下的参数而且返回结果的新函数的技术。

下面先给出一个普通的非柯里化的函数定义,实现一个加法函数:

scala> def plainOldSum(x:Int,y:Int) = x + y
plainOldSum: (x: Int, y: Int)Int
scala> plainOldSum(1,2)
res0: Int = 3

使用“柯里化”技术,把函数定义为多个参数列表:

scala> def curriedSum(x:Int)(y:Int) = x + y
curriedSum: (x: Int)(y: Int)Int
scala> curriedSum (1)(2)
res0: Int = 3

当你调用 curriedSum (1)(2)时,实际上是依次调用两个普通函数(非柯里化函数),第一次调用使用一个参数 x,返回一个函数类型的值,第二次使用参数y调用这个函数类型的值,我们使用下面两个分开的定义在模拟 curriedSum 柯里化函数:

首先定义第一个函数:

scala> def first(x:Int) = (y:Int) => x + y
first: (x: Int)Int => Int

然后我们使用参数1调用这个函数来生成第二个函数。

scala> val second=first(1)
second: Int => Int = <function1>
scala> second(2)
res1: Int = 3

first,second的定义演示了柯里化函数的调用过程,它们本身和 curriedSum 没有任何关系,但是我们可以使用 curriedSum 来定义 second,如下:

scala> val onePlus = curriedSum(1)_
onePlus: Int => Int = <function1>

下划线“_” 作为第二参数列表的占位符, 这个定义的返回值为一个函数,当调用时会给调用的参数加一。

scala> onePlus(2)
res2: Int = 3

通过柯里化,你还可以定义多个类似 onePlus 的函数,比如 twoPlus

scala> val twoPlus = curriedSum(2) _
twoPlus: Int => Int = <function1>
scala> twoPlus(2)
res3: Int = 4

科里化

 

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号