列出要理解的多个匿名/下划线参数

时间:2018-06-27 17:39:51

标签: scala functional-programming for-comprehension doobie

我对Scala / function还是陌生的,所以我还不能使用技术语言。

我遇到了理解问题

 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]对象。

Id希望将其转换为单个List(createBanco,createBancoMedio),然后执行事务处理。

但是,我会通过这样做来改变理解的返回类型。我想知道是否可以在不影响for输出值的情况下完成此操作

基本上,将列表视为我手动编写多个匿名参数一样。

2 个答案:

答案 0 :(得分:0)

就解决了它,又做了一次对列表的理解

val createList = for {
  m <- createBancoMedio
  b <- createBanco
} yield List(b, m)

val queries =
for {
  _ <- createList ....

这样,我有一个ConnectionIO [List [Int]]

答案 1 :(得分:0)

如果.sequence有一个List[G[A]]实例,您可以使用G[List[A]]G变成ApplicativeConnectionIO可以这样做:< / p>

val queries =
for {
  _ <- List(createBanco, createBancoMedio).sequence
  ...