这是我的Scala功能:
def combine(occur: Occurrences): List[List[Word]] = {
if (occur.isEmpty) List(List())
else {
for {
combintaion <- combinations(occur)
words = getWords(combintaion)
if !words.isEmpty
word: Word <- words
rest <- combine(subtract(occur, combintaion))
} yield List(word) :: rest
}
}
我希望它返回List[List[Word]]
,但编译器说,表达式返回List[List[Object]]
。为什么这样,我该怎么办?
答案 0 :(得分:5)
你应该改变
yield List(word) :: rest
到
yield word :: rest
由于rest
的类型为List[Word]
而word :: rest
仍然是List[Word]
的类型,
因此for(..) yield word :: rest
是List[List[Word]]
。
答案 1 :(得分:0)
您将在此处返回两种类型的值。
使用
val result:List[List[Word]]=List()
return result;
Insted of
if (occur.isEmpty) List(List())
因为其返回类型为List[List[Nothing]]