我正在学习scala和光滑。我得到了这样的错误:
found : Option[Int]
required: Int
def update(c: Color): Int = findById(c.id).update(c)
我不确定found
和required
代表的是什么。所以我添加了其他功能:
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)
期待不同的found
和required
,但同样的错误出现了:
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)
为什么出现同样的错误?找到和要求的是什么? 感谢。
答案 0 :(得分:2)
错误消息的来源是代码的这一部分
findById(c.id)
对于给出的所有四个例子,这部分是相同的。因此相同的错误信息。
findById(id)期望 Int 作为参数,但 c.id 会返回选项[Int]
可能的解决方案是映射 c.id
c.id map ( id => findById(id) update c )
然后它将返回 update2 所需的Option [Int]。
或者您可以使用进行理解,这会返回 Int ,因为您的功能更新需要。
for {
id <- c.id
elem = findBy(id)
} yield elem.update(c)