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 的类型推断是根据所处的上下文来来完成的.

Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-12-13 18:39:18

results matching ""

    No results matching ""