gpt4 book ai didi

scala - 使用 Slick 重构期间的类型不匹配

转载 作者:行者123 更新时间:2023-12-04 23:41:19 25 4
gpt4 key购买 nike

我有以下一段代码,我想制作 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 => 

在你的情况下。

关于scala - 使用 Slick 重构期间的类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36780560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com