我要制作DRYer的以下代码:
def createAdmin(/* ... */): Future[Int] =
db.run {
{
(users returning users.map(_.id)) += Account(0, /* ... */)
} flatMap { id =>
admins += Admin(userId = id, /* ... */)
}
}
def createStandardUser(/* ... */): Future[Int] =
db.run {
{
(users returning users.map(_.id)) += Account(0, /* ... */)
} flatMap { id =>
standardUsers += StandardUser(userId = id, /* ... */)
}
}
这样编译就可以了。但是,如果我将两者合并为以下内容:
def createUser(role: String)(/* ... */): Future[Int] =
db.run {
{
(users returning users.map(_.id)) += Account(0, /* ... */)
} flatMap { id =>
role match {
case "admin" =>
admins += Admin(userId = id, /* ... */)
case "standard" =>
standardUsers += StandardUser(userId = id, /* ... */)
}
}
}
我收到以下类型不匹配错误:
[error] found : Long => slick.dbio.DBIOAction[Int,slick.dbio.NoStream,Nothing]
[error] required: Long => slick.dbio.DBIOAction[Int,slick.dbio.NoStream,E2]
[error] } flatMap { id =>
[error] ^
[error] one error found
我似乎不知道为什么。有人可以帮我照亮吗?
编译器无法正确找出所使用的效果类型。作为一种解决方法,您应该能够通过指定所使用的类型来提供一些帮助,例如,在flatMap操作中,
flatMap[Int, NoStream, Effect.Write] { id =>
在你的情况下。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句