2014-11-19 2 views
0

내가있는 기능을 필요로하는 특성을 가지고 ClassTag 이제모호한 클래스 수준 및 상속 방법 레벨 ClassTag

trait Foo[T] { 
    def bar(a: List[T])(implicit ev: ClassTag[T]): Unit 
} 

I가 그 특성을 확장 할 필요가 있지만, 그것은 또한에 대한 ClassTag을위한 용도로 사용하는 클래스 다른 방법, 예.

class MyClass[T](implicit classTag: ClassTag[T]) extends Foo[T] { 
    override def bar(a: List[T])(implicit ev: ClassTag[T]): Unit = { /* do stuff */ } 
    def other(p: Map[String, T]) = /* other stuff where I need the ClassTag */ 
} 

이는 내가의 라인을 따라 오류 메시지가 얻을 컴파일 될 때 :

Error:scalac: ambiguous implicit values: 
both value classTag in class MyClass of type scala.reflect.ClassTag[T] 
and value ev of type scala.reflect.ClassTag[T] 
match expected type scala.reflect.ClassTag[T] 

내가 부모 특성의 방법을 클래스 수준의 ClassTag 모두를 수용하고 대체 할 수있는 방법이 있습니까?

답변

1

둘 다에 동일한 이름을 지정하기 만하면됩니다.

+0

와우, 그 사람이 오는 것을 보지 못했습니다. 그게 왜 의미가 있는지조차 모르겠지만 고마워. – kanielc

+0

이렇게하면 컴파일러는 암시 적으로 필요한 곳에서'classTag' 또는'ev'를 삽입 할 수 있으며 어느 것을 골라야할지 모릅니다. 이름이 같은 경우 생성자 인수를 참조 할 수 없으므로 (암시 적 해석을 위해 보이지 않는 것으로 간주됩니다) –

+0

실제로 말이됩니다. 마치 컴파일러를 사용하는 것과 같습니다. – kanielc