Scala:在函数界面中使用泛型

时间:2019-09-09 11:24:25

标签: scala function apache-spark object generics

我想实现一个函数(作为一个对象),类似于:

object Add extends ((Int, Int) => Int) {
  def apply(a: Int, b: Int) = a + b
}

但是我想使用泛型,因为Spark Dataset需要类似Dataset[Int]的Type。 我如何用它编写一个函数?因为该函数无法编译(未知T):

object Something extends (Dataset[T] => Unit) {
 def apply(input Dataset[T]) = {
    ...
  }    
}

编辑:

因为出现了一个问题,为什么我要这样做,最后我想写一些类似的东西:

object Process {
  def doIt(config: Configuration) = {
    val step1 = Step1(config)
    val step2 = DoStep2(step1)
    Output(step2)
  }
}

这仅与源代码(应该)的外观有关。用数学的方式编写一个像f(x)这样的函数。有了上述可能性,我可以写类似Step1(x)的东西,它看起来几乎类似于f(x)

2 个答案:

答案 0 :(得分:4)

对象不能是通用的。

但是您可以执行以下操作

object Something {
  def apply[T](ds: Dataset[T]) = {
    ...
  }
}

答案 1 :(得分:1)

尝试

class Something[T] extends (Dataset[T] => Unit) ...