下面是匿名函数以及高阶函数相结合使用的代码:
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(","))
}
}