(一)函数的字面量语法
语法: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)
}