学习
实践
活动
工具
TVP
写文章

好程序员大数据教程Scala系列之柯里化

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

好程序员大数据教程

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

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

scala>defplainOldSum(x:Int,y:Int) = x + y

plainOldSum: (x: Int, y: Int)Int

scala> plainOldSum(1,2)

res0: Int = 3

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

scala>defcurriedSum(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>deffirst(x:Int) = (y:Int) => x + y

first: (x: Int)Int => Int

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

scala>valsecond=first(1)

second: Int => Int =

scala> second(2)

res1: Int = 3

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

scala>valonePlus = curriedSum(1)_

onePlus: Int => Int =

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

scala> onePlus(2)

res2: Int = 3

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

scala>valtwoPlus = curriedSum(2) _

twoPlus: Int => Int =

scala> twoPlus(2)

res3: Int = 4

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191014A0F04G00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券