如何解决将集合列表减少到单值单元
我必须使用 List[Unit]
类型的值,我该怎么做才能将其减少到 Unit
?
def insertMany(users: List[User]) : IO[Unit] =
lines.map(line => createorUpdate(user))
.transact(xa)
def createorUpdate(user: User): ConnectionIO[Unit] =
sql"""
INSERT INTO $tableName ($columns)
VALUES (${user.id},${user.age},Now(),Now())
ON CONFLICT DO nothing"""
.update.run
.map(_ => ())
value transact is not a member of List[doobie.ConnectionIO[Unit]]
[error] possible cause: maybe a semicolon is missing before `value transact'?
[error] .transact(xa)
[error] ^
[error] one error found
解决方法
听起来您正在寻找 [updateMany][1]
,但有时这不起作用。
如果你想让你的代码工作,你需要将 transact
应用到 IO
所以它必须是这样的:
def insertMany(lines: List[String]) : IO[Unit] =
lines.map(line => createorUpdate(line)).sequence_.transact(xa)
sequence
基本上从 List[IO[your_type]] 变为 IO[List[your_type]]...
当你有 map
和 sequence_
时,你总是可以转换为 traverse
所以这也行
def insertMany(lines: List[String]) : IO[Unit] =
lines.traverse_(line => createorUpdate(line)).transact(xa)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。