<< ..

Scala方法与函数的多态

发布时间:

本文依据hongjiang.info话说模式匹配系列而来,是个人对于scala模式匹配的学习笔记

最近在Scala实际开发中,遇到多个API,其实处理过程都差不多,只是一些参数配置上不同。单纯的参数不同,便在实际开发中影响到了函数设计,为了一个参数,新建了个处理函数,这个绝对是不优雅的。优雅的做法其实是用到函数的多态。

先回顾一下scala里函数类型的定义:

trait Function1[-T, +R] {
  def apply(t: T): R
}

只要稍作修改就可以支持对入参类型支持多态,即把apply方法声明为参数化的:

trait PolyFunction1[R] {
    def apply[T](t : T) : R
}
scala> trait PolyFunction1[R] {
     |   def apply[T](t: T): R
     | }
defined trait PolyFunction1

scala> object test extends PolyFunction1[String] { def apply[T](p: T) = p.toString }
defined object test

scala> test("hello world")
res10: String = hello world

scala> test(42)
res11: String = 42