2017-03-02 1 views
1

을 가리키는 이유는 이중 정의 오류를 생산 SBT스칼라 잘못 이중 정의 스칼라에서

+1

문제를 [MCVE]에 게시 할 수 있습니까? 어느 누구도 Akka 스트림을 명시 적으로 가져 오지 않는 한이 예제를 컴파일 할 수 없습니다. –

+0

최소 예제 : def (x : Int *) : Int = 1; def to (f : String *) : Int = 1 – petrn

답변

7

그래서 이유는 왜 던지고있다

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 
} 

, 나는 다음과 같은 유형의 두 가지 기능을 정의하기 위해 노력하고있어 이중 정의 오류는 varargs가 Seq[T]으로 전달되기 때문입니다. 제네릭 형식은 컴파일 할 때 지워지기 때문에 두 함수가 동일합니다.

0

이미 이유를 찾았지만, 표준 해결 방법 중 하나에 항상 사용할 수 암시 적 매개 변수를 추가하는 것입니다, 그것은 Predef에서 DummyImplicit가 무엇 : 당신은 구별해야하는 경우

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

두 개 이상의 함수를 사용하는 경우 여러 개의 DummyImplicit 매개 변수를 사용하거나 직접 추가 유형을 정의 할 수 있습니다.

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

def to [_ : ClassTag] (함수 ​​: Function1 [RequestModel, Unit] *)도 작동해야합니다. 이 경우 바이트 코드에 약간의 영향이 있는지 확실하지 않습니다. – petrn

+0

이 특별한 이유 때문에'Predef'에'DummyImplicit'이 존재하기 때문에 그것을 사용하는 것이 더 명확합니다. –

+0

고마워, 잘 알고있어. 유일한 이유는 내 자신을 정의하는 것을 피하는 것이 었습니다. – petrn

관련 문제