柯里化详解-----------------Scala重点

定义:
柯里化是将方法或者函数中一个带有多个参数的列表拆分成多个小的参数列表(一个或者多个参数)的过程,并且将参数应用前面参数列表时返回新的函数(调用函数求值,求得的值是下一个函数的一个参数,将参数传递给下一个函数)

典型实例

//这是一个没有柯里化的方法
            scala> def sum(x:Int, y:Int) = x+ y
            sum: (x: Int, y: Int)Int

            scala> sum(2,4)
            res17: Int = 6

            #将sum写成柯里化的sum,前面方法使用一个参数列表,“柯里化”把方法或者函数定义成多个参数列表(且第一个参数只有一个参数,剩余的参数可以放在一个参数列表中)
            scala> def sum(x:Int)(y:Int) = x+y
            sum: (x: Int)(y: Int)Int 

            scala> sum(2)(4)
            res18: Int = 6

            scala> def sum(x:Int)(y:Int)(z:Int) = x+y+z
            sum: (x: Int)(y: Int)(z: Int)Int

            scala> sum(2)(4)(5)
            res19: Int = 11

            scala> def sum(x:Int)(y:Int, z:Int) = x+y+z
            sum: (x: Int)(y: Int, z: Int)Int

            scala> sum(2)(3,4)
            res20: Int = 9
            //下面是调用的本质
            #当你调用sum(2)(4)时, 实际上是依次调用了两个普通函数(非柯里化函数)
            //第一次调用使用一个参数,x 返回一个函数值
            //第二次使用参数y调用这个函数值,下面来用两个分开的定义来模拟sum柯里化函数的调用过程
            scala> def first(x:Int) = (y:Int) => x+y
            first: (x: Int)Int => Int   //frist返回的是函数值,x既是方法参数,又是函数的闭包参数

            #调用first方法会返回函数值,既产生第二个函数
            scala> val second = first(1)    //产生了第二个函数
            second: Int => Int = <function1>    //second是函数变量名,引用某个函数值

            scala> second(2)
            res21: Int = 3

            #上面first,second的定义演示了柯里化函数的调用过程,他们本身和sum并没有任何关系,但是
            scala> def sum(x:Int)(y:Int) = x+yf
            sum: (x: Int)(y: Int)Int

            scala> val second = sum(1) _ //sum(1)相当于第二方法的方法名
            second: Int => Int = <function1>

            scala> second(2) 
res22: Int = 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值