在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产生双重定义错误
答案 0 :(得分:7)
因此,它抛出双重定义错误的原因是因为,varargs被传递为Seq[T]
。由于泛型类型在编译时被擦除,因此两个函数都是等效的。
答案 1 :(得分:0)
您已找到原因,但标准的解决方法是向其中一个方法添加一个始终可用的隐式参数,这就是DummyImplicit
中Predef
的用途:
def to(functions: Function1[RequestModel, Unit]*)(implicit d: DummyImplicit) = ...
如果您需要区分两个以上的函数,您可以拥有多个DummyImplicit
参数或定义您自己的额外类型:
class DummyImplicit2
object DummyImplicit2 {
implicit def d: DummyImplicit2 = null // to avoid creating garbage
}
...