a9_scala 高阶函数

scala outline

scala outline

高阶函数高在哪里?

(1)函数可以作为值进行传递
(2)函数可以作为参数进行传递
(3)函数可以作为函数返回值返回

函数可以作为值进行传递

  1. 在被调用函数f后面加上空格和下划线,相当于把函数f当成一个整体,传递给变量tmp
  2. tmp是一个变量,变量的类型为函数,这个函数的参数为空,返回值为Int
  def main(args: Array[String]): Unit = {

    def f(): Int = {
      println("hello")
      77
    }

    var tmp: () => Int = f _ // tmp:变量名称 () => Int:变量类型
    println(tmp())
  }

注意:如果明确了变量的类型,那么空格和下划线可以省略

// 尚未明确变量的类型
 var tmp = f _
// 明确了变量的类型,那么函数后的空格和下划线可以省略
 var tmp:()=>Int = f

函数可以作为参数进行传递

这个大多数情况都是通过匿名函数的形式 scala匿名函数链接

函数可以作为函数返回值返回

  1. 以下代码也称之为函数嵌套

  2. 语法:函数名称+空格+下划线

  def main(args: Array[String]): Unit = {

    def f1(): () => Unit = {
      def f2(): Unit = {
        println("f2函数被调用了")
      }
      // 将 f2 作为返回值返回给f1,因为f2是函数,所以f1函数的返回值类型也是函数,即() => Unit,该函是参数为空,返回值类型为unit
      f2 _ // 语法:函数名称+空格+下划线
    }
    
    val f3: () => Unit = f1()
    // 因为f1函数的返回值依然为函数,所以可以变量f3可以作为函数继续调用
    f3()
    // 上面的代码可以简化为
    f1()()
  }

f2替换为匿名函数

  def main(args: Array[String]): Unit = {
    def f1(): () => Unit = {
      // 1. 函数最后一行默认为返回值
      // 2. f2替换为匿名函数(如果可以简化,那就简化,这里不再简化)    
      ()=>{println("f2函数被调用了")}
    }
    f1()()
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值