函数字面量
1 函数字面量写成匿名函数,并当作值传递
2 函数字面量被编译到类中,在运行时实例化,为函数值
占位符语法
1 如果参数在函数字面量中只出现一次,则可以把_当作参数的占位符
2 每次函数被调用,_处用函数的参数来填入
3 有时不指定类型会出错
部分应用函数/偏应用函数
1 不需要提供函数的所有参数
2 使用_代替整个参数列表
someNumbers.foreach(println _) //等同于下方
someNumbers.foreach(x => println(x))
3 a中sum _是部分应用函数的表达式,_代替整个参数列表,b中_代替其中一个参数
重复参数
1 可以指定函数最后一个参数时可变长度参数
2 数组参数添加冒号和_*,可以正确传入
尾递归
1 最后一个动作是调用自己的函数,叫做尾递归 tail recursive
2 Scala检测到尾递归后就用新值更新函数参数,替换成回到函数开头的跳转
3 不为每次调用创建新的堆栈结构,所有调用使用一个堆栈
4 boom不是尾递归,bang是尾递归