scala闭包与柯里化

闭包

闭包是一个函数,它的返回值取决于此函数之外声明一个或多个变量的值

var factor = 3
val multiplier = (i:Int) => i * factor //返回值依赖外部的变量factor
//"="号右边是作为fun的函数体的函数,它的返回值取决于fun的局部变量
def fun(x: Int) = (y: Int) => x * y //fun: fun[](val x: Int) => Int => Int
//上边可以写成柯里化形式
def fun(x: Int)(y: Int) = x * y //fun: fun[](val x: Int)(val y: Int) => Int
fun(2)(3) //6

柯里化(curring)

柯里化是一种新技术,它把接受多个参数的方法变换成接受一个单一参数的函数,并且返回接受余下的参数的新函数

//原始多参数
def sum(x:Int,y:Int) = x + y

//变换成接收一个参数
def first(x:Int) = (y:Int) => x + y //first: first[](val x: Int) => Int => Int

//调用方式1
val second=first(1) //second: Int => Int = <function1>
second(2) //res0: Int = 3
//调用方式2
first(1)(2)

//方式2的调用比较简洁,所以**方法**也可以定义成与此一致的方式
def sum(x:Int)(y:Int) = x + y //sum: sum[](val x: Int)(val y: Int) => Int
sum(1)(2) //res0: Int = 3
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值