Incompatibilidade de tipo estranho em Scala
Espero que esta pergunta ainda não tenha sido respondida em outro lugar. Não encontrou uma resposta aqui.
No meu sistema de localização, tenho uma classe chamada 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
}
e um objeto chamado 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
}
Ainda não escrevi nenhum código que esteja usando essa estrutura, mas tentar em uma sessão interativa revelou um erro de tipo que eu realmente não entendo:
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)
^
Eu realmente não tenho idéia do que está errado. Mas, pela minha experiência com Haskell, acho que a solução está apenas a uma pequena mudança .;)
Alguém poderia me ajudar? Valeu.
P.S .: usando Scala 2.8.0.final