02-09-2015, 10:12 PM
(02-09-2015, 04:47 PM)niahoo a écrit : @Max72 ta classe value integer peut elle même étendre une classe abstraite. L'idée est de bloquer les setters et cela devrait se faire à un seul endroit.
@srm Tu as oublié de comparer les noms de ville en lowercase
Enfin, les numéros de rue sont des String.
edit: lescase class
qui n'ont qu'un seul membre ont une fonction toString définie automatiquement qui output ce membre ?
En effet j'ai oublié le lowercase.
Pour les numéros de rue c'est un détail, j'ai respecté l'implémentation d'origine.
(02-09-2015, 04:54 PM)Xenos a écrit : @srm Ca compare quoi, le "==" en fin de ton Scala? Les valeurs des membres? Ou le résultat du toString?Les valeurs des membres car j'ai utilisé des case class, donc ton test ne passe pas
(02-09-2015, 04:54 PM)niahoo a écrit : srm ça compile pas ton trucOui normal je n'ai pas mis de main class, il suffit de le tester en faisant "scala nomdufichier.scala", ça fait l'équivalent d'un REPL avec un fichier.
Voilà l'exemple mis à jour par rapport à mon oubli :
import scala.reflect.ClassTag
abstract class CompareWithoutCase[T: ClassTag] {
override def equals(that: Any) = that match {
case that: T => this.toString equalsIgnoreCase that.toString
case _ => false
}
}
case class Numero(value: Int) {
require(value > 0, "Le numéro doit être positif")
}
case class Rue(value: String) extends CompareWithoutCase[Rue] {
require(value.length > 0, "La rue ne doit pas être une chaîne vide")
}
case class Ville(value: String) extends CompareWithoutCase[Ville] {
require(value.length > 0, "La ville ne doit pas être une chaîne vide")
}
case class Adresse(numero: Numero, rue: Rue, ville: Ville) {
override def toString = numero.value + " " + rue.value + " " + ville.value
}
val adresse_de_jean = Adresse(Numero(44), Rue("de la mairie"), Ville("Paris"))
val adresse_de_bob = Adresse(Numero(44), Rue("de la Mairie"), Ville("PARIS"))
val adresse_dun_malin = Adresse(Numero(44), Rue("de la "), Ville("Mairie PARIS"))
println("Jean habite au " + adresse_de_jean);
if (adresse_de_bob == adresse_de_jean) {
println("Adresses identiques pour Bob et Jean");
} else {
println("Adresses différentes pour Bob et Jean");
}
if (adresse_de_bob == adresse_dun_malin) {
println("Adresses identiques pour Bob et un malin");
} else {
println("Adresses différentes pour Bob et un malin");
}
Jean habite au 44 de la mairie Paris
Adresses identiques pour Bob et Jean
Adresses différentes pour Bob et un malin