四种不同的功能,不同的返回类型,相同的错误

时间:2014-04-21 05:42:17

标签: scala slick slick-2.0

我正在学习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)

为什么出现同样的错误?找到和要求的是什么? 感谢。

1 个答案:

答案 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)