Scala : 'implizit' und type-parameter

Bin ich ein wenig Schwierigkeiten zu verstehen, das folgende Phänomen:

trait Trait[A] {
  def traitType: String
}

object Trait {
  implicit val stringTrait: Trait[String] = new Trait[String] {
    def traitType: String = "string"
  }

  implicit val intTrait: Trait[Int] = new Trait[Int] {
    def traitType: String = "int"
  }
}

class Media[A] {
  //works
  def mediaType(implicit t: Trait[A]): String = t.traitType
  //does not compile
  def mediaType: String = implicitly[Trait[A]].traitType
}

object Main {
  def main(args: Array[String]) {
    val a = new Media[String]
    val b = new Media[Int]

    println(a.mediaType)
    println(b.mediaType)
  }
}

In der obigen snippet zeige ich 2 verschiedene Implementierungen mediaType Methode (ich habe einen Kommentar von Ihnen beim kompilieren des Codes). Allerdings die version mit den implizit nicht kompilieren? Ich bekomme folgende Fehlermeldung:

impl.scala:19: error: could not find implicit value for parameter e: Trait[A]
  def mediaType: String = implicitly[Trait[A]].traitType
                                    ^
one error found

Ich verstehe, dass es gibt keine implizite Wert der Eigenschaft[A] verfügbar. Ich verstehe nicht, warum Ein nicht aufgelöst werden, um die Art von Medien wird instanziiert mit. Ich glaube, ich bin zu viel denken, in Bezug auf die C++ - Vorlagen hier und ich wäre sehr dankbar wenn jemand könnte mir einen Zeiger in die richtige Richtung.

Grüße,
raichoo

InformationsquelleAutor raichoo | 2011-05-20
Schreibe einen Kommentar