2014-04-21 41 views
1

我正在學習scala和浮油。我得到這樣的錯誤:四種不同的功能具有不同的返回類型,相同的錯誤

found : Option[Int] 
required: Int 
    def update(c: Color): Int = findById(c.id).update(c) 

我不知道什麼是foundrequired立場。所以我添加其他功能:

def update(c: Color): Int   = findById(c.id).update(c) 
def update2(c: Color): Option[Int] = findById(c.id).update(c) 
def update3(c: Color): String  = findById(c.id).update(c) 
def update4(c: Color): Unit  = findById(c.id).update(c) 

期待不同foundrequired,但同樣的錯誤就出來了:

found : Option[Int] 
required: Int 
    def update(c: Color): Int = findById(c.id).update(c) 

found : Option[Int] 
required: Int 
    def update2(c: Color): Option[Int] = findById(c.id).update(c) 

found : Option[Int] 
required: Int 
    def update3(c: Color): String  = findById(c.id).update(c) 

found : Option[Int] 
required: Int 
    def update4(c: Color): Unit  = findById(c.id).update(c) 

爲什麼同樣的錯誤就出來了?什麼被發現和要求代表什麼? 謝謝。

回答

2

錯誤消息的來源是你的代碼

findById(c.id) 

的這部分中的一部分是給所有四個例子一樣。因此相同的錯誤信息。

findById(ID)期望一個詮釋作爲參數,但c.id返回選項[INT]

一種可能的解決方案將是映射在c.id

c.id map (id => findById(id) update c ) 

然後它將返回所要求的您UPDATE2選項[INT]。

或者你可以使用理解這將返回一個詮釋爲你的函數更新需要

for { 
    id <- c.id 
    elem = findBy(id) 
} yield elem.update(c) 
相關問題