2014-04-21 37 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) 
相关问题