1

我正在学习scala和slick。我得到了这样的错误:

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)

并期待不同的foundand 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)

为什么会出现同样的错误?发现和要求代表什么?谢谢。

4

1 回答 1

2

错误消息的来源是您的代码的这一部分

findById(c.id)

这部分对于给出的所有四个示例都是相同的。因此相同的错误消息。

findById( id )需要一个Int作为参数,但c.id返回一个Option[Int]

一个可能的解决方案是映射c.id

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

然后它将根据您的update2要求返回 Option[Int] 。

或者您可以使用for comprehension ,它会根据您的函数更新需要返回一个Int

for {
  id <- c.id
  elem = findBy(id)
} yield elem.update(c)
于 2014-04-21T17:44:39.257 回答