在Scala中键入不匹配错误

时间:2013-05-09 12:47:15

标签: scala type-mismatch

我昨天因为类型不匹配错误而被阻止,我不知道如何纠正它。也许你可以帮助我。

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)]

如何解决此错误?

2 个答案:

答案 0 :(得分:4)

您可以使用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基本上++组合在一起。

请注意,我盲目地转换代码,因为我知道这是作业,所以我不会尝试分析算法是否正确。

答案 1 :(得分:1)

问题在于,Occurrences的每个成员都会产生一个列表 - 所以你会得到像List[List[Occurrences]]这样的东西。我猜您可以使用flatMap代替map,这会使列表变平。