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

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)

并期望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)

为什么会出现相同的错误? 找到什么并要求代表什么? 谢谢。

===============>>#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理解 ,这将在您的函数更新需要时返回一个Int值。

for {
  id <- c.id
  elem = findBy(id)
} yield elem.update(c)

  ask by Sato translate from so

未解决问题?本站智能推荐: