将集合列表缩减为单值单位



我必须有一个类型为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]]。。。

当你有mapsequence_时,你总是可以转换为traverse,所以这也可以

def insertMany(lines: List[String]) : IO[Unit] =
lines.traverse_(line => createorUpdate(line)).transact(xa)

最新更新