函数基本概念
object test01 {
def main(args: Array[String]): Unit =
{
def f0(name:String):String={
name
}
println(f0("zhong"))
println("--------------------------")
def f1(name:String):String=name
println(f0("zhong"))
println("--------------------------")
def f2(name:String)=name
println(f0("zhong"))
println("--------------------------")
def f3(name:String): Unit ={
println(name)
}
f3("zhong")
println("--------------------------")
def f4():Unit={
println("zhong")
}
f4()
f4
println("--------------------------")
def f5:Unit={
println("zhong")
}
f5
println("--------------------------")
(name:String)=>{println(name)}
}
}
匿名函数
object test01 {
def main(args: Array[String]): Unit = {
val fun=(name:String)=>{println(name)}
fun("zhong")
def f(func:String=>Unit):Unit={
func("zhong")
}
f(fun)
f((name:String)=>{println(name)})
f((name:String)=>println(name))
f((name)=>println(name))
f(name=>println(name))
f(println(_))
f(println)
}
}
固定数值,传入函数
object test01 {
def main(args: Array[String]): Unit = {
def f(fun:(Int,Int)=>Int):Int={
fun(1,2)
}
val add=(a:Int,b:Int)=>a+b
val minus=(a:Int,b:Int)=>a-b
println(f(add))
println(f(minus))
println("----------------------")
println(f((a:Int,b:Int)=>a+b))
println(f((a:Int,b:Int)=>a-b))
println("----------------------")
println(f((a,b)=>a+b))
println(f((a,b)=>a-b))
println("----------------------")
println(f(_+_))
println(f(_-_))
println(f((a,b)=>b-a))
println(f(-_+_))
}
}
函数作为值进行传递
object test01 {
def main(args: Array[String]): Unit = {
def f(n:Int):Int={
println("f调用")
n+1
}
val result=f(123)
println(result)
val f1:Int=>Int=f
val f2=f _
println(f1)
println(f1(24))
println(f2)
println(f2(24))
}
}
函数作为参数进行传递,函数可作为函数的返回值返回
object test01 {
def main(args: Array[String]): Unit = {
def f(op:(Int,Int)=>Int,a:Int,b:Int):Int={
op(a,b)
}
val a=f((a,b)=>a+b,12,35)
println(a)
def f1():Int=>Unit={
def f2(a:Int):Unit={
println("f2调用 "+a)
}
f2
}
val f3=f1()
println(f3(33))
println(f1()(25))
}
}
应用案例:相当于map操作
object test01 {
def main(args: Array[String]): Unit = {
val arr:Array[Int]=Array(12,34,65,88)
def arrayOps(array: Array[Int],op:Int=>Int):Array[Int]={
for(elem<-array) yield op(elem)
}
val arr1=arrayOps(arr,a=>a+1)
println(arr1.mkString(","))
val arr2=arrayOps(arr,a=>a*2)
println(arr2.mkString("|"))
}
}