我希望這個問題還沒有在其他地方回答。在這裏沒有找到答案。奇怪類型在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