Pourquoi ne puis-je pas faire cela: afin de comparer toute séquence de types convertible vers mise à jour: cela doit exécuter int code>? Comment puis-je implémenter un modèle similaire? P>
Message.comPare (liste (1.0, 2.0, 3.0), liste (0, 0, 0)) Code> p> p>
3 Réponses :
Puisque vous traitez avec Le message d'erreur du compilateur dans ce cas ne pouvait pas 't être plus clair imo. p> edit: strong> p> Vous n'avez pas vraiment besoin de convertir des séquences en tableaux. Ce qui suit fonctionne simplement bien. P> Array code> s, vous avez besoin classManifest code> s. def compare[A <% { def toInt: Int },
B <% { def toInt: Int }]
(bs: Seq[A], is: Seq[B]): Boolean = {
(bs, is).zipped.forall(_.toInt == _.toInt)
}
Étrange ... cela échoue: println (Message.comPare (liste (1, 2, 3), liste (0, 0, 0))) code>
@HUGOSFERREIRA: C'est vraiment étrange. Je suis désolé; Je ne sais pas comment se déplacer.
@Hugosferreira: Il semble être un bug.
Ça fonctionne bien pour moi lorsque je supprimai l'inutile convertir le SEQ en une matrice nécessiterait que vous ajoutez une classe impliciteManifest, mais Scala ne fait pas Laissez-vous mélanger ceux avec les limites de la vue. p> p> Toarray code>
Il échoue avec comparer (liste (2, 3), liste (2, 4)) code>
Eh bien, les limites de la vue que vous définissez indiquent que les types A et B doivent être des cours qui ont une conversion implicite disponible sur un type de structure avec une méthode toint code>. 2, 3 etc. sont des entiers et la classe INT de Scala n'a pas de méthode de TOINT CODE>. Afin de faire fonctionner cela, vous devez définir une classe qui est essentiellement quel est mon exemple de classe B, puis crée une fonction de conversion implicite de Int vers B.
implicitement [int => {def toint: int}] code> réussit. Donc, le code compile, mais échoue au moment de l'exécution.
"Cependant, Scala ne vous permet pas de mélanger ceux avec des limites de vue." << Cela fait, pensait que ce n'est pas une solution au problème de l'OP.
Un bon exemple d'où le problème des mensonges semblerait faire cela:
def compare[A : Numeric, B : Numeric](bs : Seq[A], cs : Seq[B]) = {
(bs, cs).zipped.forall(implicitly[Numeric[A]].toInt(_) == implicitly[Numeric[B]].toInt(_))
}