// ParInf.scala
package ParameterInfer
object ParInf {
def main(args: Array[String]): Unit = {
val list = List(1, 2, 3)
/*
匿名函数类型推断简化规则:
1. 参数类型是可以推断时,可以省略参数类型
2. 当传入的函数,只有单个参数时,可以省去括号
3. 如果变量在=> 右边顺序出现且只出现一次,可以用_ 来代替,否则计算逻辑会乱。
*/
println(list.reduce((x: Int, y: Int) => x + y)) // 6
println(list.reduce((x, y) => x + y)) // 6
println(list.reduce(_ + _)) // 6
println(list.reduce((x: Int, y: Int) => x - y)) // -4
println(list.reduce((x, y) => x - y)) // -4
println(list.reduce(_ - _)) // -4
println(list.reduce((x: Int, y: Int) => y - x)) // 2
println(list.reduce((x, y) => y - x)) // 2
println(list.reduce(_ - _)) // -4 这里跟预期的2 不一样了
}
}
abc@WM tmp $ scalac ParInf.scala && scala ParameterInfer.ParInf
6
6
6
-4
-4
-4
2
2
-4