我希望这个问题还没有在其他地方回答。在这里没有找到答案。奇怪类型在Scala中不匹配
在我定位系统我有一个名为语言
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([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)
^
我真的没有线索有什么问题。但从我与Haskell的经验来看,我认为解决方案只是一个小小的改变;)
有人能帮助我吗?谢谢。
P.S:使用Scala的2.8.0.final
'LanguageCreator'类可能很有趣?也许你可以尝试把它煮成尽可能少的代码,但仍然给出相同的错误 – svrist 2010-09-01 11:28:43
您好svrist和thx您的回复 在交互式会话中,我将代码简化为基本上您看到的getter/setter内容LanguageCentral,它工作得很好。所以感谢您的提示:至少我知道错误不存在;) LanguageCreator使用opencsv周围的自制包装创建需求语言。我有点不愿意发布全班(100行)。任何怀疑?我应该寻找什么?一些懒惰的魔术可能? (没有明确地使用懒惰) 顺便说一下:本地化框架还没有包(所以我可以测试它)。 编译器只创建一个Language.class – Agl 2010-09-01 13:13:18
没有换行符? (wasntme) – Agl 2010-09-01 13:14:08