J'espère que cette question n'a pas encore été répondue ailleurs. Je n'ai pas trouvé de réponse ici.Bizarre Type Mismatch dans Scala
Dans mon système de localisation que j'ai une classe nommée Langue
class Language(val name:String, dict:HashMap[String, String]) {
def apply(key: String):String = (dict get key) match {
case None => "°unknown°"
case Some(s) => s
}
//DO SOME OTHER THINGS
}
et un objet nommé LanguageCentral
object LanguageCentral {
private var lang:Option[Language] = None
//SOME OTHER PRIVATE MEMBERS
def language = lang
def language_=(l:Option[Language]) = l match {
case None => {}
case Some(l) => setLanguage(l)
}
def setLanguage(l:Language) {
lang = Some(l)
//DO SOME OTHER THINGS
}
//DO LOTS OF OTHER THINGS
}
Je n'ai pas écrit un code qui est en utilisant encore ce cadre, mais essayer dans une session interactive a révélé une erreur de type que je ne comprends pas vraiment:
scala> val l = new LanguageCreator("Languages.csv").getLanguage("English")
l: Option[Language] = Some([email protected])
scala> LanguageCentral.language=l
<console>:23: error: type mismatch;
found : Option[Language]
required: Option[Language]
LanguageCentral.language=l
^
scala> LanguageCentral setLanguage (l getOrElse null)
<console>:24: error: type mismatch;
found : Language
required: Language
LanguageCentral setLanguage (l getOrElse null)
^
Je n'ai vraiment aucune idée de ce qui ne va pas. Mais d'après mon expérience avec Haskell, je suppose que la solution n'est qu'un changement mineur.)
Quelqu'un pourrait m'aider? THX.
P.S .: Scala utilisant 2.8.0.final
La classe 'LanguageCreator' pourrait être intéressante? Peut-être que vous pourriez essayer de le réduire à un code aussi faible que possible qui donne toujours la même erreur – svrist
salut svrist et thx pour votre réponse Dans une session interactive j'ai réduit le code à essentiellement les choses getter-/setter que vous voyez dans LanguageCentral et cela a bien fonctionné. Donc merci pour votre conseil: au moins je sais que l'erreur n'est pas là;) LanguageCreator crée la langue demandée en utilisant un wrapper selfmade autour d'opencsv. Je suis un peu réticent à poster toute la classe (100 lignes). Des soupçons? Que devrais-je rechercher? Une magie paresseuse peut-être? Par ailleurs: le framework de localisation n'a pas encore de paquet (donc je peux le tester). Le compilateur crée un seul Language.class – Agl
aucun saut de ligne? (wasntme) – Agl