第12节:Scala函数式编程进阶(匿名函数,高阶函数,函数类型推断,currying柯里化)

package basics
object fuctionalPrograming {
   def main(args: Array[String]): Unit = {
     //1.函数和变量一样作为scala语言的一等公民,函数可以直接赋值给变量
    val hidata= hibigdata _
    hidata("spark")

     /* 2.幻术更常用的方式是匿名函数,定义的时候说明输入参数的类型和函数体即可,
   * 不需要名称,但是如果你要使用的话,一般会把这个匿名函数赋值给一个变量
   * */
    //匿名函数
    val f=(name:String)=>{println("his "+name)}
    //f("kafa")

     //函数可以作为参数直接传递给函数,
     // 第一:以前java的方式是new出一个接口实例,并在接口实例
     // 的回调方法中来实现业务逻辑,现在是直接把回调方法传递给我们的函数,且在函数体中直接使用,简化了代码的编写
     //提升了开发效率,这种方式
     //第二:这种方式非常方便编写负责的业务逻辑和控制逻辑
    def getName(func:(String)=>Unit,name:String){
      func(name)
    }
    getName(f, "java")
    
    Array(1 to 10:_*).map{(item:Int)=>2*item}.foreach{x=>println(x)}

     //函数返回值可以是一个函数(name:String)=>println(msg+" his "+name)作为返回值返回
     //当函数返回类型是个函数的时候,这个时候就表明sacla的函数实现了闭包
     //闭包的内幕是:scala的参数都是类和对象,scala的参数都做为了对象,所以后续可以继续访问
     def funcresult(msg:String)=(name:String)=>println(msg+" his "+name)
    // def funcresult(msg:String,name:String){println(msg+" his "+name)}
     
    funcresult("hi")("job")//等同于下面代码,Currying函数写法(柯里化写法)这就是高阶函数的写法
    
    val result=funcresult("hi")
    result("job")
    
    
    
   }
   def hibigdata(name:String){
     print("hi "+name)
   }
}
运行结果:
hi sparkhis java
2
4
6
8
10
12
14
16
18
20
hi his job
hi his job
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值