Я надеюсь, что на этот вопрос еще не ответили где-то еще. Не нашел ответа здесь.
В моей системе локализации у меня есть класс с именем Language
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
}
и объект с именем 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
}
Я еще не написал ни одного кода, использующего эту платформу, но попытка его в интерактивном сеансе выявила ошибку типа, которую я не совсем понимаю:
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)
^
Я действительно понятия не имею, что не так. Но из моего опыта работы с Haskell я думаю, что решение - это лишь незначительное изменение.;)
Может ли кто-нибудь помочь мне? Thx.
P.S .: с использованием Scala 2.8.0.final