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 모두를 수용하고 대체 할 수있는 방법이 있습니까?
와우, 그 사람이 오는 것을 보지 못했습니다. 그게 왜 의미가 있는지조차 모르겠지만 고마워. – kanielc
이렇게하면 컴파일러는 암시 적으로 필요한 곳에서'classTag' 또는'ev'를 삽입 할 수 있으며 어느 것을 골라야할지 모릅니다. 이름이 같은 경우 생성자 인수를 참조 할 수 없으므로 (암시 적 해석을 위해 보이지 않는 것으로 간주됩니다) –
실제로 말이됩니다. 마치 컴파일러를 사용하는 것과 같습니다. – kanielc