Перечислите несколько анонимных / подчеркивающих параметров для понимания

Я немного новичок в Scala/ функционал, поэтому я еще не могу использовать технический язык.

Я испытываю проблемы с пониманием

 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) и затем выполнить транзакцию.

Тем не менее, я бы изменил тип возврата для понимания. Я хотел бы знать, есть ли способ сделать это, не влияя на выходное значение

По сути, обрабатывайте список так, как если бы я писал несколько анонимных параметров вручную.

2 ответа

Решение

Ты можешь использовать .sequence повернуть List[G[A]] в G[List[A]] если G имеет Applicative экземпляр, который ConnectionIO делает:

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

Просто решил это, сделал другое для понимания для Списка

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

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

Таким образом, у меня было ConnectionIO[Список [Int]]

Другие вопросы по тегам