1. 没有名字的函数就是匿名函数。
    2. (x:Int)=>{函数体}
    3. x:表示输入参数类型;Int:表示输入参数类型;函数体:表示具体代码逻辑

    传递匿名函数至简原则:
    (1)参数的类型可以省略,会根据形参进行自动的推导
    (2)类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参 数超过 1 的永远不能省略圆括号。
    (3)匿名函数如果只有一行,则大括号也可以省略
    (4)如果参数只出现一次,则参数省略且后面参数可以用_代替

    例子

    1. val fun = (name: String) => {
    2. println(name)
    3. }
    4. fun("abc")
    5. println("========================")
    6. // 定义一个函数,以函数作为参数输入
    7. def f(func: String => Unit): Unit = {
    8. func("a1")
    9. }
    10. f(fun)
    11. f((name: String) => {
    12. println(name)
    13. })
    14. println("========================")
    15. // 匿名函数的简化原则
    16. // 1. 参数的类型可以省略,会根据形参进行自动的推导
    17. f((name) => {
    18. println(name)
    19. })
    20. //2. 类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参数超过1的永远不能省略圆括号。
    21. f( name => {
    22. println(name)
    23. })
    24. // (3)匿名函数如果只有一行,则大括号也可以省略
    25. f(name => println(name))
    26. println("========================")
    27. // (4)如果参数只出现一次,则参数省略且后面参数可以用_代替
    28. f( println(_) )
    29. // (5) 如果可以推断出,当前传入的println是一个函数体,而不是调用语句,可以直接省略下划线
    30. f( println )
    31. println("=========================")
    32. // 实际示例,定义一个”二元运算“函数,只操作1和2两个数,但是具体运算通过参数传入
    33. def dualFunctionOneAndTwo(fun: (Int, Int)=>Int): Int = {
    34. fun(1, 2)
    35. }
    36. val add = (a: Int, b: Int) => a + b
    37. val minus = (a: Int, b: Int) => a - b
    38. println(dualFunctionOneAndTwo(add))
    39. println(dualFunctionOneAndTwo(minus))
    40. // 匿名函数简化
    41. println(dualFunctionOneAndTwo((a: Int, b: Int) => a + b))
    42. println(dualFunctionOneAndTwo((a: Int, b: Int) => a - b))
    43. println(dualFunctionOneAndTwo((a, b) => a + b))
    44. println(dualFunctionOneAndTwo( _ + _))
    45. println(dualFunctionOneAndTwo( _ - _))
    46. println(dualFunctionOneAndTwo((a, b) => b - a))
    47. println(dualFunctionOneAndTwo( -_ + _))