快学scala笔记第十二章 高阶函数

18 篇文章 0 订阅

1 指向函数的变量

  注意:ceil 后的_表示该函数的所有参数

     val xfunc=scala.math.ceil _

    val r=xfunc(4.5)

存储自定义函数的变量,在map方法返回集合

def calc(x:Int)=3*x+1
  def calc2(x:Int)=8+x
  def main(args: Array[String]): Unit = {
    //存储函数地址的变量
    var f1=calc _
    //集合的map操作
    var arr1=(1 to 10).map(3*_+1)
    f1=calc2 _
    var arr2=(1 to 10).map(f1)
    println(arr1+"\n"+arr2)
  }

2  map中使用匿名函数及参数特点

//map中使用匿名函数
//    var arr3=(1 to 10).map((x:Int)=>x+1)
    //匿名函数的参数实施类型推断 x对应每次map迭代中获取集合的单个值
//     var arr3=(1 to 10).map(x=>x+1)
//    匿名函数的参数可以使用_替代
    var arr3=(1 to 10).map(_+1)

    for(i<-arr3)print(i+"  ")

3 高阶函数

如果一个函数参数的类型是另一个函数,将该函数称为高阶函数; 

//自定义函数,该函数的参数类型和返回类型与高阶函数one的第一个参数的形式一致

  def xia(n:Int)="恭喜发财,"*n

  //定义高阶函数
//  def one(one的参数名:匿名函数(函数参数类型)=>函数的返回类型)={调用one的参数}
  def one(x:(Int)=>String,y:Int)=x(y)
  def two(x:Int)={x+3}
  def main(args: Array[String]): Unit = {
    //调用one函数,为one传递xia函数和数值作为参数
    val res:String=one(xia,4)
    println(res)
  }

调用高阶函数参数类型推断

定义高阶函数

 def msum(arg:(Double,Double)=>Double)=arg(5.5,2.0)

调用高阶函数,为其传递匿名函数,匿名参数x,y的数据类型与高阶函数声明一致

val res=msum((x:Double,y:Double)=>x*y)

但是,具体使用时候,可以jvm自动推导出参数的类型,所以可以使用如下方式调用

val res=msum((x,y)=>x*y)

4 高阶函数应用

(1 to 5).map("*"*_).foreach(println _)

val res=(1 to 3).reduceLeft(_ * _)

结果:

(1*2)*3=6

通过split的空格拆分单词,按单词字符串长度排序

val res="this is a tree".split("\\s+").sortWith(_.length > _.length)

res.foreach(println _)


5 闭包

/闭包:如果定义的函数执行返回另一个函数,包装返回中的函数称为闭包;
  //作用:闭包使用函数设计模式,导致闭包的函数能够在非作用域也能够被调用;
//  def bi(x:Int)=匿名函数
  def bi(x:Int)=(y:Int,z:Int)=>y*z+x
  def main(args: Array[String]): Unit = {
    //调用外部函数,返回闭包函数
    var func=bi(8)//8传递bi中x,返回后函数x=8


    //分解执行闭包函数
    var res=func(7,6)
    println(res)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值