推断类型参数[Boolean]不符合方法过滤器的类型参数bounds [T.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推断类型参数[Boolean]不符合方法过滤器的类型参数bounds [T.相关的知识,希望对你有一定的参考价值。

我对以下类型的布尔值有编译错误,但它适用于其他数据类型。有任何想法吗?请指教。谢谢

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

如果你看看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)))
}

以上是关于推断类型参数[Boolean]不符合方法过滤器的类型参数bounds [T.的主要内容,如果未能解决你的问题,请参考以下文章

打字稿重载、可选参数和类型推断

类型不匹配:推断类型为 Unit 但预期为 Boolean

typescript 从子类调用的构造函数参数推断类型

推断拥有成员函数的类的类型

C# 泛型方法类型参数不是从用法中推断出来的

GroovyGroovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )