我有以下遞歸方法:爲什麼我無法將Nil附加到列表中?
def myMethod(foo: List[FooBar], acc: List[MyClass]): List[MyClass] {
// ... some code ...
myMethod(foo.tail, acc :+ getMyObject(foo.head).getOrElse(Nil))
}
getMyObject
任選返回MyClass
實例的方法。不幸的是,我不能編譯這一點,因爲我得到這個錯誤:
[error] found : List[Product with Serializable]
[error] required: List[MyClass]
該編譯錯誤表明我不能追加Nil
到列表acc
,所以我必須使用下面的代碼:
def myMethod(foo: List[FooBar], acc: List[MyClass]): List[MyClass] {
// ... some code ...
val bar = getMyObject(foo.head)
myMethod(foo.tail, if (bar.isDefined) acc :+ bar.get else acc)
}
但是,我更喜歡第一種方法,因爲它更簡潔。爲什麼我不能將Nil
添加到列表中?
'getMyObject'返回一個'Option [MyClass]' - 所以這不會編譯 –
你是對的,編輯過 – Mikel