.Gap dans le concept de commande implicite d'un type utilisé pour créer une collection
J'ai une classe
org.personal.exercises.LengthContentsPair (l: Int, c: String)
{
val length = l
val contents = c
}
Puis, dans le même fichier source, je définir également une valeur implicite qui définit la façon dont les objets de ce type est à commander, ainsi:
object LengthContentsPair {
implicit val lengthContentsPairOrdering = new Ordering [LengthContentsPair] {
def compare (a: LengthContentsPair, b: LengthContentsPair)= {
a.length compare b.length;
}
}
}
suite aux solutions données dans ce forum.
Maintenant, je veux créer un ensemble spécialisé qui limite le nombre d'éléments de l'ensemble à un nombre donné. Donc, je définis une classe séparée comme ceci:
import scala.collection.immutable.TreeSet;
import org.personal.exercises.LengthContentsPair.lengthContentsPairOrdering;
class FixedSizedSortedSet [LengthContentsPair] extends TreeSet [LengthContentsPair]
{ ..
}
Pour moi, cela semble la bonne façon de sous-classe un TreeSet. Mais, le compilateur renvoie l'erreur suivante:
(1) No implicit Ordering defined for LengthContentsPair.
(2) not enough arguments for constructor TreeSet: (implicit ordering: Ordering[LengthContentsPair])scala.collection.immutable.TreeSet[LengthContentsPair]. Unspecified value parameter ordering.
Ai-je mal compris les règles de portée? C'est quelque chose de très facile que je ressens, mais je ne peux pas mettre la main dessus.
Gosh! Je me réprimande d'être aveugle à l'effet d'ombre. Comment pourrais-je manquer cela et passer au moins une heure à regarder le code. Merci beaucoup pour avoir remarqué. Et, oui, dans mon code source, LengthContentsPair est en effet une 'classe de cas' car j'ai beaucoup de matches à faire. – Nirmalya