scala implicit

来源:互联网 发布:软件开发项目总结报告 编辑:程序博客网 时间:2024/05/29 03:27

implicit 可用于变量 伴生对象 参数 方法

object Math {  trait NumberLike[T] {    def divide(x: T, y: Int): T  }  object NumberLikes {    implicit object NumberLikeDouble extends NumberLike[Double] {      def divide(x: Double, y: Int): Double = {        println("o-------------")        x / y      }    }  }  class Number extends NumberLike[Double] {    def divide(x: Double, y: Int): Double = {      println("t-------------")      123.0    }  }  implicit val test = new Number}object Statistics {  import Math.NumberLike  def mean[T](xs: Vector[T])(implicit ev: NumberLike[T]): T = {    println(ev.isInstanceOf[NumberLike[T]])    ev.divide(xs.reduce(ev.plus(_, _)), xs.size)  }}

测试对于mean的隐含参数,伴生对象的优先级高于变量,还有貌似泛型的类型可以根据参数推断,所以可以省略


0 0