scala - 期望 NotInferedR 的类型不匹配
问题描述
我试图让一个基本的工作 Slick 证明工作,但我从这一行得到一个类型不匹配错误:
def * : MappedProjection[Nothing, (Option[Int], String)] = (id.?, name) <> (User.tupled, User.unapply)
具体来说,User.tupled
和User.unapply
分别有以下错误:
Type mismatch, expected: Option[(Option[Int], String)] => NotInferedR, actual: Option[(Option[Int], String)] => User
和
Type mismatch, expected: NotInferedR => Option[(Option[Int], String)], actual: User => option[(Option[Int], String)]
我不知道为什么编译器认为它应该是NotInferedR
;我找不到与此相关的任何文档,以及似乎认为这已经足够的多个教程。
这是我的package.scala
文件:
package nford
import slick.basic.DatabaseConfig
import slick.jdbc.JdbcProfile
package object domain {
trait DatabaseBacking {
val config: DatabaseConfig[JdbcProfile]
val db: JdbcProfile#Backend#Database = config.db
}
}
这是我的User.scala
文件:
package nford.domain
import nford.domain
import slick.basic.DatabaseConfig
import slick.dbio.DBIOAction
import slick.jdbc.JdbcProfile
import slick.lifted.{Index, MappedProjection}
import scala.concurrent.Future
case class User(id: Option[Int], name: Option[String])
trait UserTable {
this: DatabaseBacking =>
import config.profile.api._
private class User(tag: Tag) extends Table[User](tag, "user") {
def id: Rep[Int] = column[Int]("id", O.PrimaryKey, O.AutoInc)
def name: Rep[String] = column[String]("name")
def * : MappedProjection[Nothing, (Option[Int], String)] = (id.?, name) <> (User.tupled, User.unapply)
}
val user = TableQuery[User]
}
如何解决这种不匹配?
解决方案
迟到的答案,但我刚刚遇到了同样的问题,发现了这个未答复的帖子。不幸的是,我无法弄清楚为什么它不起作用。我已经看到示例按照您的方式编写,但也许这些示例使用的是早于 2.12 的 Scala 版本?无论如何,我发现 usingmapTo
对我有用。因此,在您的情况下,它将是:
def * : ProvenShape[User] = (id.?, name.?).mapTo[User]
(我认为 name 也需要.?
,因为在 User 类中是 a ,并且该name
列被定义为 a )Option[String]
name
String
推荐阅读
- javascript - 如何在 JavaScript 中用空字符串替换“未定义”
- java - 我的电脑出现 Android Studio gradle 构建错误
- reactjs - 使用 React 从 Firestore 中的 id 数组中获取文档数组
- android - 在 Android 中显示延迟的相机镜头 - 如何实现?
- terraform - 配置 Terraform map(object{}) 变量,其中一些键:值是敏感的,而另一些则具有正则表达式验证。for_each 处理不了
- amazon-web-services - 使用动态端口映射时目标组中的端口错误
- c++ - 当 if/else 链的长度超过 100 行时,缩进格式损坏 - Visual Studio 2017 C++
- javascript - 将 MERN 应用程序部署到 heroku 时出错 :)
- javascript - 将 JavaScript 数组中的值相加
- terraform - 如何将先前作业中的变量传递给 Terraform 计划任务的 terraform_parameters 参数?