Scala中的类型不匹配错误
问题描述:
自昨天起,我阻止了有关类型不匹配错误的信息,但我看不到如何更正它。也许你可以帮助我。Scala中的类型不匹配错误
def combine(head : (Char,Int), xs : Occurrences) : List[Occurrences] =
xs.map { case (x,i) => for (occu <- 1 to head._2) yield List((x,i), (head._1, occu)) }
这里是我的错误:
type mismatch;
found : List[scala.collection.immutable.IndexedSeq[List[(Char, Int)]]]
required: List[forcomp.Anagrams.Occurrences]
我怎样才能解决这个错误类型Occurrences
被定义为type Occurrences = List[(Char, Int)]
?
答
你可以通过使用flatMap来解决你的问题,它将连接(展平)列表给你。
def combine(head : (Char,Int), xs : Occurrences) : List[Occurrences] =
xs.flatMap { case (x,i) => (1 to head._2).map(occu =>List((x,i), (head._1, occu))) }
现在,每一次出现,它会产生具有(x,i)
元组和(head._1, occu)
元组和所有的名单基本上将++
“由flatMap D一起列表。
请注意,我盲目地转换你的代码,因为我知道这是家庭作业,所以我不会尝试分析算法是否正确。
答
问题是,对于Occurrences
的每个成员,您将生成一个列表 - 因此您得到的内容类似于List[List[Occurrences]]
。我想你可能会使用flatMap
而不是map
,这将使列表变平。
+0
感谢您的回答。我忘了flatMap !! – Dimitri 2013-05-09 14:02:00
别担心,根据你的回答,我终于找到了解决办法。谢谢 – Dimitri 2013-05-09 14:01:44
很高兴听到它! – coltfred 2013-05-09 16:03:32