Scala函数之柯里化讲解

柯里化(Currying)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。

先看看实例:

首先定义一个函数:

def plus(x:Int,y:Int) = x + y  //非柯里化函数

现在,把上面的函数变下形:

def plus(x:Int)(y:Int) = x + y //柯里化函数

//或者
def plus(x:Int) = (y:Int) => x + y //柯里化函数

//那么我们应用的时候,应该是这样用:plus(1)(2),最后结果都一样是3,这种方式(过程)就叫柯里化。

实现过程:

plus(1)(2)实际上是调用两个普通函数(非柯里化),第一次使用参数x,返回一个函数类型的值,第二次使用参数y调用这个函数类型的值。

本质上是先演变成这样一个方法:

def plus(x:Int)=(y:Int)=>x+y

//这个函数就是接收一个x为参数,返回一个匿名函数,
//该匿名函数的定义是:接收一个Int型参数y,函数体为x+y。现在我们来对这个方法进行调用。
val r1 = plus(1) 

返回一个result,那result的值应该是一个匿名函数:(y:Int)=>1+y

所以为了得到结果,我们继续调用r1。

val sum = r(2)

最后打印出来的结果就是3。

下面看个完整的例子

 val str1:String = "Hello, "
 val str2:String = "Scala!"
 println( "str1 + str2 = " +  strcat(str1)(str2) )
   
   def strcat(s1: String)(s2: String) = {
      s1 + s2
   }


//结果:str1 + str2 = Hello, Scala!


def mulCurry(x: Int) = (y: Int) => x * y
println(mulCurry(10)(9))

def mulCurry2(x: Int)(y:Int) = x * y
println(mulCurry2(10)(8))


柯里化的应用:

比较两个字符串在忽略大小写的情况下是否相等,注意,这里是两个任务:

1、全部转大写(或小写)

2、比较是否相等

val a = Array("Hello", "World")
val b = Array("hello", "world")
println(a.corresponds(b)(_.equalsIgnoreCase(_)))

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值