Die Methode Array.fill
hat folgende Signatur:
def fill[T](n: Int)(elem: => T)(implicit arg0: ClassManifest[T]): Array[T]
Um eine Instanz von ClassManifest[T]
zu erhalten, müssen Sie den konkreten Typ kennen. Ein ClassManifest
kann wie folgt erhalten werden:
implicitly[ClassManifest[String]]
Ein ClassManifest
ist implizit für jeden konkreten Typ verfügbar.
Für jeden implicit
Fehler können Sie die benötigten Impliziten dem Methode mit dem Typ-Parameter hinzufügen:
def wrap[T](n:Int)(elem: => T)(implicit c:ClassManifest[T], o:Ordering[T])
Wenn Sie nicht selbst ClassManifest
oder Ordering
eingeführt haben, haben die Autoren der Bibliothek (höchstwahrscheinlich) vernünftige Standards für Sie bereitgestellt.
Wenn Sie die Methode wrap
aufrufen würden:
wrap(2)(3)
Wird dies erweitert wie folgt:
wrap[Int](2)(3)(implicitly[ClassManifest[Int]], implicitly[Ordering[Int]])
Wenn Sie hier eine benutzerdefinierte Klasse Person
eingeführt hätten, würden Sie einen Fehler erhalten, da keine implizite Instanz von Ordering[Person]
gefunden wurde. Die Autoren der Bibliothek konnten nicht wissen, wie man Person
ordnet. Sie könnten dies wie folgt lösen:
class Person
implicit val o = new Ordering[Person] { // Implementieren der benötigten Methoden }
wrap(2)(new Person)
Der Scala-Compiler sucht in verschiedenen Bereichen nach Impliziten, eine Ordering
würde normalerweise nicht so spezifiziert werden. Ich empfehle Ihnen, die implizite Auflösung im Internet nachzuschlagen, um mehr darüber zu erfahren.