使用Scala语言对匿名函数、高阶函数的定义以及详细解释(代码加注解)

下面是匿名函数以及高阶函数相结合使用的代码:

object FunDemo3 {
  /**
    * 匿名函数、高阶函数
    */
  def main(args: Array[String]): Unit = {
    val arr:Array[String] = Array("I","love","my","country")
//  def foreach[U]:Unit = {
//    def println(x: Any) = Console.println(x)
//    arr.foreach((item)=>{
//      println(item)
//    })
//  }
    arr.foreach((item)=>println(item))
    arr.foreach(println)

    println("----------------------")
    //案例问候函数的不同方式的调用
    /*
     每天上班,遇见不同的人
      同事老王  早,吃了么?
      直接领导:张哥
      部分副总:唐总
      其他组:小妹妹
 */
  greeting("老王",(name:String)=>{
    println(name+"早,吃了么?")
  })
    greeting("张哥",(name:String)=>{
      println(name+",早")
    })
    greeting("唐总",(name:String)=>{
      println(name+",好")
    })
    greeting("litter",(name:String)=>{
      println(name+",smile")
    })
    //将匿名函数 赋值给变量,传递给函数中
    val xmm = (name:String)=>println(name+",smile")
    greeting("xmm",xmm)

    /*
    scala中,一切为了简洁性,能简单就简单,能省就省
     */

    //1-完整的写法
greeting("小妹妹",(name:String)=>{
  println(name +",simle")
})
    //2-正常写法
    //高阶函数可以自己自动推断参数的类型,不需要写参数类型。
    greeting("litter",(name)=>println(name+",smile"))

    //3-
    //如果函数的参数,函数体(右边),有且仅使用一次,参数可以使用下划线_代替
    println("--litter--")
    greeting("litter",println(_))
    //4-简写
    // def println(x: Any) = Console.println(x)
    greeting("litter",println)
  }

  /**
    * 定义一个sayhello的函数
    * @param name
    * @param msg
    */
  def sayHello(name: String,msg:String="Hi,litter")=println(name+msg)

  /**
    * 定义一个问候的函数
    * @param name
    * @param sayHello
    */
  def greeting(name:String,sayHello:(String)=>Unit) :Unit={
    sayHello(name)
  }
}

高阶函数的定义:

object FunDemo4 {
  def main(args: Array[String]): Unit = {
    val arr:Array[Int] = Array(1,2,3,4)
   // def map [B,That](f:A=>B):That = {}
    arr.map((item:Int)=>{
      item*item
    })
    arr.map((item)=>2*item)
    val result:Array[Int] = arr.map(2 * _)
    println(result.mkString(","))
  }

}

猜你喜欢

转载自blog.csdn.net/wyz0516071128/article/details/81039670