No coinciden los tipos raros en Scala
Espero que esta pregunta aún no haya sido respondida en otro lugar. No encontré una respuesta aquí.
En mi sistema de localización tengo una clase llamada Idioma
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
}
y un objeto llamado 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
}
Todavía no he escrito ningún código que use este marco, pero intentarlo en una sesión interactiva reveló un error de tipo que realmente no entiendo:
scala> val l = new LanguageCreator("Languages.csv").getLanguage("English")
l: Option[Language] = Some(Language@7aeb46d)
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)
^
Realmente no tengo idea de lo que está mal. Pero desde mi experiencia con Haskell, supongo que la solución es solo un cambio menor de distancia .;)
¿Alguien podría ayudarme? Gracias.
P.S .: usando Scala 2.8.0.final