Scala方法和函数
/**
* 6.嵌套方法
*/
def fun(num:Int) :Int = {
def fun (a:Int) :Int = {
if(a==1)[
1
}else{
a*fun1(a-1)
}
}
fun1(num)
}
printIn(fun(5))
/**
* 7.偏应用函数
*某些情况下,方法中参数非常多,调用这个方法非常频繁,每次调用只有固定的某个参数变化,其他都不变,可以定义偏应用来实现
*/
def showLog(data :Data,log:String):Unit ={
printIn(s”data is $data , log is $log”)
}
val data = new Data ()
showLog(data,log=”a”)
showLog(data,log=”b”)
showLog(data,log=”c”)
可用偏应用来替代:
def fun:String =>Unit = showLog(data,_:String)
fun(“aaa”)
fun(“bbb”)
fun(“ccc”)
/**
* 8.高阶函数
* 1).方法的参数是函数
* 2).方法的返回是函数
* 3).方法的参数和返回都是函数
*/
// 方法的参数是函数
def fun(a:Int,b:Int) :Int = {
a+b
}
def fun1(f:Int,Int)=>Int,s:String):String = {
val i :Int = f(100,200)
I+”#”+s
}
val result = fun1(fun,”scala”)
printIn(result)
//方法的返回是函数
def fun(s:String) : (String, String)=>String = {
def funl (s1:String, s2:String): String={
sl+”*” +s2+” #” +s
}
fun1
}
println(fun("a")("b", "c" ))
//方法的参数和返回都是函数
def fun(f: (Int, Int)=>Int): (String, String)=>String = {
val i: Int = f(1,2)
def funl (sl:String, s2:String):String = {
s1+”0” +s2+"* +i
}
funl
}
printIn(fun(a, b)=> {a+b})("hello", "world ”)
/**
* 9.柯里化函数
def fun(a:Int, b:Int) (c:Int, d:Int) :Int ={
a+b+c+d
}
printIn(fun(1,2)(3, 4))