柯里化的作用

很多文章再写柯里化的时候没说明其作用,就列了个x+y

下面还是用x+y为例子先给出一个普通的非柯里化的函数定义,实现一个加法函数:

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 =
scala> second(2)
res1: Int = 3

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

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

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

scala> onePlus(2)
res2: Int = 3

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值