有没有办法在不传递参数的情况下创建泛型类型特征

时间:2017-03-05 06:41:29

标签: scala

我有这样的特性我可以创建管道对象,如Pipe [String,Int],Pipe [String,String],Pipe [(String,Double),String]

trait Pipe[In,Out] {
  def apply(rdd: RDD[In]): RDD[Out]
}

有没有办法像这样创建特征管道

trait Pipe {
  def apply[In,Out](rdd: RDD[In]): RDD[Out]
}

然后我可以使用Pipe对象而不给出任何参数。但是我无法创建这个特征对象。

1 个答案:

答案 0 :(得分:0)

为了从RDD[Out] 需要生成RDD[In],知道如何将一个转换为另一个。这种转换将保留Out参数,例如:

trait Pipe[In,Out] {
  def apply(rdd: RDD[In]): RDD[Out] = rddTransformer(rdd)
  private def rddTransformer: RDD[In] => RDD[Out]
}

如果您在编译时知道某些Out类型的In类型,那么请查看功能依赖项:https://milessabin.com/blog/2011/07/16/fundeps-in-scala/