推断类型参数[Boolean]不符合方法过滤器的类型参数边界[T<:slick.lifted.Rep [_]]

时间:2018-01-05 00:07:23

标签: scala playframework slick

我在类型为Boolean的情况下遇到了以下编译错误,但它适用于其他数据类型。有任何想法吗?请指教。感谢

inferred type arguments [Boolean] do not conform to method filter's type parameter bounds [T <: slick.lifted.Rep[_]]
[error]     db.run(repo.filter(_.id == id).map(r => (r.id, r.name, r.isPublic)).update((id, name, isPublic)))
[error]  type mismatch;
[error]  found   : proj.domain.mapping.RepositoryMapping => Boolean
[error]  required: proj.domain.mapping.RepositoryMapping => T
[error]     db.run(repo.filter(_.id == id).map(r => (r.id, r.name, r.isPublic)).update((id, name, isPublic)))
[error]                             ^
[error] two errors found
[error] (compile:compileIncremental) Compilation failed

以下是代码:

def updateTest(id: Long, name: String, isPublic: Boolean): Unit = {
    db.run(repo.filter(_.id == id).map(r => (r.id, r.name, r.isPublic)).update((id, name, isPublic)))
  }

1 个答案:

答案 0 :(得分:8)

如果您查看QUERIES documentation,可能会发现以下警告

  

大多数运算符模仿纯Scala等价物,但您必须使用===代替==来比较两个相等的值和=!=而不是!=的不等式。这是必要的,因为这些运算符已经在基类型Any上定义(具有不合适的类型和语义),因此它们不能被扩展方法替换。

因此,请将代码更改为使用===,如下所示:

def updateTest(id: Long, name: String, isPublic: Boolean): Unit = {
    db.run(repo.filter(_.id === id).map(r => (r.id, r.name, r.isPublic)).update((id, name, isPublic)))
}