Scala错误地指出了双重定义

时间:2017-03-02 09:02:26

标签: scala generics

在Scala中,我正在尝试定义以下类型的两个函数

def to(sinks: Sink[RequestModel, NotUsed]*): VyasaGraph = {
  val current = sinks.toList
  connect(previous, current)
  previous = current
  this
}

def to(functions: Function1[RequestModel, Unit]*): VyasaGraph = {
  val current = (for (func <- functions) yield Sink.foreach[RequestModel](func)).toList
  connect(previous, current)
  previous = current
  this
}

为什么sbt产生双重定义错误

2 个答案:

答案 0 :(得分:7)

因此,它抛出双重定义错误的原因是因为,varargs被传递为Seq[T]。由于泛型类型在编译时被擦除,因此两个函数都是等效的。

答案 1 :(得分:0)

您已找到原因,但标准的解决方法是向其中一个方法添加一个始终可用的隐式参数,这就是DummyImplicitPredef的用途:

def to(functions: Function1[RequestModel, Unit]*)(implicit d: DummyImplicit) = ...

如果您需要区分两个以上的函数,您可以拥有多个DummyImplicit参数或定义您自己的额外类型:

class DummyImplicit2
object DummyImplicit2 {
  implicit def d: DummyImplicit2 = null // to avoid creating garbage
}
...