进阶函数

55 阅读1分钟

(一)函数的字面量语法

语法:var 变量 = (参数列表)=>{方法体}

它省略了def,函数名以及函数的返回值类型。

Scala的函数字面量的简化方式有两种方式:

第一种方式为:_(占位符)。如果函数中的参数在方法体中只使用了一次,可以用_替换。

第二种方式为:只有一个表达式时,可以省略括号。

def sum(x: Int , y:Int): Unit = {
  x+y
}

val sum1 = (x:Int,y:Int) => {x+y}
val sum2 = (x:Int,y:Int) => x+y
val sum3 : (Int,Int) => Int = {_ + _}

(二)把函数作为参数

定义一个接收函数作为参数的函数def a(f:()=>Unit)={},

其中函数的类型()=>Unit部分()为函数的参数,Unit为函数的返回值。

通过定义字面量传递值时,字面量必须和函数的类型匹配。

// 奶茶店1  
var add = (x:Int, y:Int) => x + y  
// 咖啡店1  
var mul = (x:Int, y:Int) => x*y  
// 定义一个函数。它的特点是:第一个参数的类型是函数!  
// 美团  
var op = (fn: (Int, Int)=>Int, a:Int, b:Int) => {  
fn(a,b)  
}  
//    add(100, 200) // 直接去奶茶店买  
  
println( op(add, 100, 200) )  
println( op(mul, 100, 200) )

(三)把函数作为返回值

函数的返回值是一个函数。

def main(args: Array[String]): Unit = {  
    // 函数f 的返回值就是一个函数  
    var f = (x:Int) => {  
      // println(x)  
      //      var f1 = (y:Int) => x + y  
      //      f1 // 返回值是一个函数  
      (y:Int) => x + y  
    }  
 
    var s = f(2) //  s 是一个函数  
    var res = s(10)  
    println(res)  
  }