Scala—— 24.高阶函数

能够接受函数作为参数的函数,叫做高阶函数(higher-order function)。可使应用程序更加健壮

1.作为参数的函数(高阶函数引入)

def plus(x: Int) = 3 + x
 
//说明
val result = Array(1, 2, 3, 4).map(plus(_))
println(result.mkString(",")) //4,5,6,7
 
//说明
//1. 在scala中,函数也是有类型,比如plus就是 <function1>
println("puls的函数类型function1" + (plus _))

2.高阶函数基本使用

    def test(f: Double => Double, f2: Double => Int, n1: Double) = {
      f(f2(n1)) // f(0)
    }
 
    //sum 是接收一个Double,返回一个Double
    def sum(d: Double): Double = {
      d + d
    }
 
    def mod(d: Double): Int = {
      d.toInt % 2
    }
 
    val res = test(sum, mod, 5.0) //
    println("res=" + res) // 2.0
 
  }

3.返回函数类型的高阶函数

def minusxy(x: Int) = {
  (y: Int) => x - y //匿名函数
}

//分步执行
//f1 就是 (y: Int) => 3 - y
val f1 = minusxy(3)
println("f1的类型=" + f1)
println(f1(1)) //  2
println(f1(9)) //  -6

4.参数(类型)推断

参数推断省去类型信息(在某些情况下[需要有应用场景],参数类型是可以推断出来的,如list=(1,2,3) list.map() map中函数参数类型是可以推断的),同时也可以进行相应的简写。
参数类型是可以推断时,可以省略参数类型。
当传入的函数,只有单个参数时,可以省去括号。
如果变量只在=>右边只出现一次,可以用_来代替。

val list = List(1, 2, 3, 4)
println(list.map((x: Int) => x + 1)) //(2,3,4,5)
println(list.map((x) => x + 1)) //(2,3,4,5)
println(list.map(x => x + 1)) //(2,3,4,5)
println(list.map(_ + 1)) //(2,3,4,5)
 
 
println(list.reduce(f1)) // 10
println(list.reduce((n1: Int, n2: Int) => n1 + n2)) //10
println(list.reduce((n1, n2) => n1 + n2)) //10
println(list.reduce(_ + _)) //10
 
val res = list.reduce(_ + _)

————Blueicex 2020/2/17 10:10 blueice1980@126.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值