函数作为返回值(闭包和柯里化的使用)

一般写法

 // 一般写法
def fun1(): (String) => String = {

  // 内部函数
  def f(s: String): String ={
    s
  }
  // 函数作为返回值
  f _
}

// 调用
val ff: String => String = fun1()
println(ff("hello"))
// 或者
println(fun1()("hi"))

闭包概念

        内部函数访问外部函数的变量,当外部函数执行结束后,栈内存空间释放,但是会自动延长变量的生命周期,这时,外部变量和内部函数就形成了闭包。

闭包的使用

// 外部函数
def fun1(): (Int) => Int ={
  // 外部函数变量
  var a = 10

  // 内部函数
  def fun2(b: Int): Int = {
    a + b
  }
  
  // 作为值返回
  fun2 _
}

// 调用
println(fun1()(20))

// 闭包的简化
def f3(): (Int) => Int ={
  var a = 10

  (b: Int) => a + b
}
// 调用简化版闭包
// println(f3()(20))

柯里化的概念

        将函数的一个参数列表中的多个参数,拆分为多个参数的形式。

柯里化的使用

// 柯里化
def fun1()(b: Int): Int = {
  var a = 10
  a + b
}

val res: Int = fun1()(20)
println(res)

// 柯里化运行时会转为如下效果
def fun1(): (Int) => Int = {
  var a = 10
  (b: Int) => a + b
}

柯里化的好处

  • 每一个参数列表表示一个函数,清晰明确。
  • 简化闭包代码的编写。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值