package com.bjsxt.scalaimport java.util.Dateobject Lesson_fun { def main(args: Array[String]): Unit = { /** * 1.方法定义 * 1.方法定义使用“def” * 2.方法可以传参,参数类型不能省略,方法的计算结果类型可以省略,会自动推断。 * 3.方法名和方法体“{...}”要有等号隔开,也可以不写“=”,不写“=”无论方法体最后一行计算结果是什么,都会被丢弃,返回Unit. * 4.方法体中的返回值可以使用return返回,如果写“return”,方法体的返回类型不能省略。 * 也可以不使用return返回,不写return 方法体默认将最后一行计算的结果返回,建议不写return。 * 5.方法体中如果一行可以搞定,方法体的“{..}”可以省略不写。 */// def max(x:Int,y:Int) ={// if(x>y){// x// }else{// y// }// }// def max(x:Int,y:Int) = if(x>y) x else y// // println(max(1,2)) /** * 2.递归函数 * 递归方法要显式声明方法的返回类型 * */// def fun(num:Int):Int = {// if(num==1){// num// }else{// num*fun(num-1)// }// }// // println(fun(5)) /** * 3.参数有默认值的函数 */// def fun(a:Int=100,b:Int=200) = {// a+b// }// // println(fun(b=3)) /** * 4.可变长参数的函数 */// def fun(s:String*) = {// s.foreach((str:String)=>{// println(str)// })// }// def fun(ss:String*) = {// ss.foreach(println)// }// // fun("abc","hello","world","yyy") /** * 5.匿名函数 */// val f = ()=>{// println("hello world~")// } // val f = (a:Int,b:Int)=>{// a+b// }// println(f(100,200)) /** * 6.偏应用函数 */// def showLog(date:Date,log:String) = {// println("date is "+date +" ,log is "+log)// }// val date = new Date()// showLog(date,"a")// showLog(date,"b")// showLog(date,"c")// // val fun = showLog(date,_:String)// fun("aaa")// fun("bbb")// fun("ccc") /** * 7.嵌套函数 */// def fun(i:Int)={// // def fun1(a:Int):Int={// if(a==1){// 1// }else{// a*fun1(a-1)// }// }// // fun1(i)// // }// // println(fun(5)) /** * 8.高阶函数 * 函数的参数是函数 * 函数的返回是函数 * 函数的参数和返回都是函数 */ //函数的参数是函数 // def fun1(f:(Int,Int)=>Int,c:String) = {// val result = f(100,200)// result+"~"+c// }// val end = fun1((a:Int,b:Int)=>{// a*b// },"hello")// // println(end) //函数的返回是函数 -----要显示的声明函数的返回类型// def fun(a:Int,b:Int) :(Int,Int)=>Int= {// val result = a+b// def fun1(i:Int,j:Int):Int={// i*j+result// }// fun1// }// // println(fun(1,2)(100,200)) // 函数的参数和返回都是函数 // def fun(f:(Int,Int)=>Int,a:Int):(String,String)=>String ={// val result = f(1,2)+a// def fun1(s1:String,s2:String):String = {// s1+"@"+s2+"$"+result// }// fun1 // }// // println(fun((a:Int,b:Int)=>{a*b},100)("hello","world"))//hello@world$102 /** * 9.柯里化函数 * 高阶函数简化版 */// def fun(a:Int,b:Int)(c:Int,d:Int) = {// a+b+c+d// }// // println(fun(1,2)(3,4)) }}