14.5 参数(类型)推断
当将一个匿名函数传递给另一个函数和方法时, Scala 会尽可能的帮助你推断出类型信息.
object ParamDemo2 {
def main(args: Array[String]): Unit = {
// 完整的写法
val res1 = evaluate((n: Double) => n + 10)
// 因为evaluate接收的函数的参数类型必须是 Double, 所以可以省略n的类型
val res2 = evaluate((n) => n + 10)
// 因为匿名函数的参数只要一个, 所以圆括号可以省略. 注意: 其他情况都不能省略
val res3 = evaluate(n => n + 10)
// 如果参数在 => 右侧只出现一次, 就可以使用 _ 替换掉它. 这时左边的形参也可以省略了.
val res4 = evaluate(_ + 10) // 可读性更好: 表示一个把 形参 + 10 的函数, 并把值返回
println(res1 + "," + res2 + "," + res3 + "," + res4)
}
/*
接收一个函数作为参数.
内部是调用接收到的函数
*/
def evaluate(x: Double => Double): Double = {
x(0.25)
}
}
注意:
必须要有类型推断的情况下才能使用一些简写.
Scala 的类型推断是根据所处的上下文来来完成的.