在 for-comprehension 中列出多个 anonymous/underscore 参数
List to multiple anonymous/underscore parameters in for-comprehension
我是 Scala/functional 的新手,所以我还不能使用技术语言。
我在理解方面遇到了问题
val queries =
for {
_ <- createBanco
_ <- createBancoMedio
bankInsertions <- Update[Banco](insertStr).updateMany(NonEmptyList.fromList(createBankList(1, maxBanks)).get)
mediumInsertions <- Update[BancoMedio](mediumInsert).updateMany(NonEmptyList.fromList(mediumList).get)
bankCount <- BancoStatements.getCount().unique
bankGetIds <- BancoStatements.getIds(0, maxBanks).to[List]
bankSome <- BancoStatements.getSome(halfBanks).to[List]
} yield (bankCount, bankGetIds, bankSome)
//Execute database queries, saves them on tuple
val transactionResults : (Int, List[String], List[Banco]) =
queries.transact(h2Transactor).unsafeRunSync()
我正在尝试重构 _ <- createBanco 和 _ <- createBancoMedio,它们都是一个 ConnectionIO[Int] 对象。
我想将它们转换为单个列表(createBanco、createBancoMedio),然后执行交易。
但是,我这样做会改变 return 类型的理解。我想知道是否有任何方法可以在不影响输出值的情况下做到这一点
基本上,把这个列表当作我手动写多个匿名参数一样。
刚刚解决了,再做一个理解列表
val createList = for {
m <- createBancoMedio
b <- createBanco
} yield List(b, m)
val queries =
for {
_ <- createList ....
这样我就有了一个 ConnectionIO[List[Int]]
如果 G
有一个 Applicative
实例,您可以使用 .sequence
将 List[G[A]]
变成 G[List[A]]
,ConnectionIO
:
val queries =
for {
_ <- List(createBanco, createBancoMedio).sequence
...
我是 Scala/functional 的新手,所以我还不能使用技术语言。
我在理解方面遇到了问题
val queries =
for {
_ <- createBanco
_ <- createBancoMedio
bankInsertions <- Update[Banco](insertStr).updateMany(NonEmptyList.fromList(createBankList(1, maxBanks)).get)
mediumInsertions <- Update[BancoMedio](mediumInsert).updateMany(NonEmptyList.fromList(mediumList).get)
bankCount <- BancoStatements.getCount().unique
bankGetIds <- BancoStatements.getIds(0, maxBanks).to[List]
bankSome <- BancoStatements.getSome(halfBanks).to[List]
} yield (bankCount, bankGetIds, bankSome)
//Execute database queries, saves them on tuple
val transactionResults : (Int, List[String], List[Banco]) =
queries.transact(h2Transactor).unsafeRunSync()
我正在尝试重构 _ <- createBanco 和 _ <- createBancoMedio,它们都是一个 ConnectionIO[Int] 对象。
我想将它们转换为单个列表(createBanco、createBancoMedio),然后执行交易。
但是,我这样做会改变 return 类型的理解。我想知道是否有任何方法可以在不影响输出值的情况下做到这一点
基本上,把这个列表当作我手动写多个匿名参数一样。
刚刚解决了,再做一个理解列表
val createList = for {
m <- createBancoMedio
b <- createBanco
} yield List(b, m)
val queries =
for {
_ <- createList ....
这样我就有了一个 ConnectionIO[List[Int]]
如果 G
有一个 Applicative
实例,您可以使用 .sequence
将 List[G[A]]
变成 G[List[A]]
,ConnectionIO
:
val queries =
for {
_ <- List(createBanco, createBancoMedio).sequence
...