- 没有名字的函数就是匿名函数。
- (x:Int)=>{函数体}
- x:表示输入参数类型;Int:表示输入参数类型;函数体:表示具体代码逻辑
传递匿名函数至简原则:
(1)参数的类型可以省略,会根据形参进行自动的推导
(2)类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参 数超过 1 的永远不能省略圆括号。
(3)匿名函数如果只有一行,则大括号也可以省略
(4)如果参数只出现一次,则参数省略且后面参数可以用_代替
例子
val fun = (name: String) => {println(name)}fun("abc")println("========================")// 定义一个函数,以函数作为参数输入def f(func: String => Unit): Unit = {func("a1")}f(fun)f((name: String) => {println(name)})println("========================")// 匿名函数的简化原则// 1. 参数的类型可以省略,会根据形参进行自动的推导f((name) => {println(name)})//2. 类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参数超过1的永远不能省略圆括号。f( name => {println(name)})// (3)匿名函数如果只有一行,则大括号也可以省略f(name => println(name))println("========================")// (4)如果参数只出现一次,则参数省略且后面参数可以用_代替f( println(_) )// (5) 如果可以推断出,当前传入的println是一个函数体,而不是调用语句,可以直接省略下划线f( println )println("=========================")// 实际示例,定义一个”二元运算“函数,只操作1和2两个数,但是具体运算通过参数传入def dualFunctionOneAndTwo(fun: (Int, Int)=>Int): Int = {fun(1, 2)}val add = (a: Int, b: Int) => a + bval minus = (a: Int, b: Int) => a - bprintln(dualFunctionOneAndTwo(add))println(dualFunctionOneAndTwo(minus))// 匿名函数简化println(dualFunctionOneAndTwo((a: Int, b: Int) => a + b))println(dualFunctionOneAndTwo((a: Int, b: Int) => a - b))println(dualFunctionOneAndTwo((a, b) => a + b))println(dualFunctionOneAndTwo( _ + _))println(dualFunctionOneAndTwo( _ - _))println(dualFunctionOneAndTwo((a, b) => b - a))println(dualFunctionOneAndTwo( -_ + _))
