Size: a a a

Scala User Group

2021 August 11

S

Simon in Scala User Group
собственно точно то же, что и в http4s
источник

S

Simon in Scala User Group
и лечится точно так же:
pathPrefix(p1)(getUser1{ user => r1 }) ~ pathPrefix(p2)(getUser2 {user => r2})
источник

D

Daniel in Scala User Group
если сделать доп роутинг при склейке, то все будет норм
источник

D

Daniel in Scala User Group
а вот в акка-хттп нет
источник

S

Simon in Scala User Group
как и в http4s
источник

S

Simon in Scala User Group
источник

S

Simon in Scala User Group
http4s и akka-http функционально эквивалентны за исключением пары мелочей и более "сахарного" dsl у akka
источник

D

Daniel in Scala User Group
в общем, заюзайте org.http4s.server.Router и если пути отличаются для firstRoutesWithMid и secondRoutesWithMid, должно помочь
источник

EK

Evgenii Kuznetcov in Scala User Group
Ну Router это признание поражения.
Еще варианты:
1) клеить пути в виде Request[F] => Option[OptionT[F, Response[F]]]
2) иметь F[_] вида Option[G[_]]
3) по-колхозному прокинуть аутентикацию в сами роуты параметром (как бы сделал я)
источник

D

Daniel in Scala User Group
Option[OptionT[F, Response[F]]]? штош
источник

P

Pavel in Scala User Group
есть еще вариант не делать аутентификацию на уровне бизнес логики, а на уровне всяких istio, но вопрос не про это конечно же
источник

D

Daniel in Scala User Group
не всегда подойдет ж
источник

EK

Evgenii Kuznetcov in Scala User Group
А, ну и еще вариант: убрать HttpRoutes.of и передовать в middleware напрямую  PartialFunction
источник

λ

λoλcat in Scala User Group
Да
источник
2021 August 12

Α

Αγβεκ in Scala User Group
Всем привет
Есть такой код на скале
val pow2: LazyList[Long] =
 0L #::
 1L #::
 pow2.tail.map(_ * 2)

pow2.take(10).toList

https://scastie.scala-lang.org/moOITDehRzeuwqYTfz5SBQ

Почему конструкция pow2.tail.map(_ * 2)
в каждой итерации добавляет по одному элементу в lazylist
а не (длина лейзи листа-1)

я думал в итоге лейзи лист будет расти так
0 1
0 1 2
0 1 2 2 4
0 1 2 2 4 4 4 8

Но получается:
0 1
0 1 2
0 1 2 4
0 1 2 4 8
источник

S

Simon in Scala User Group
В LazyList нельзя ничего добавить.
Тут фактически LazyList задан формулой для вычисления следующего элемента: удвоить предыдущий.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
> Почему конструкция pow2.tail.map(_ * 2) в каждой итерации добавляет по одному элементу в lazylist
не знаю, что вы назвали итерацией, но давайте поредьюсим
pow2.tail = 1L #:: pow2.tail.map(_ * 2)
заменяя xs = pow2.tail
xs = 
  1L #:: xs.map(_ * 2) =
  1L #:: 2L #:: xs.map(_ * 2).map(_ * 2) =
  1L #:: 2L #:: 4L #:: xs.map(_ * 2).map(_* 2).map(_ * 2)
= ...
тогда на i-m месте вашего списка будет лежать элемент 2 ^ i

если хотите добиться желаемого списка проще (и эффективнее) будет сделать не рекурсию, а
pow2 = 0 #:: LazyList.from(1).flatMap(i => LazyList.fill(i)(BigInt(2).pow(i)))
источник

Α

Αγβεκ in Scala User Group
под итерацией я имел ввиду процесс когда вместо pow2.tail.map(_ * 2) вычисляется значение

Становится понятнее - спасибо! - поэкспериментирую еще)
источник

Α

Αγβεκ in Scala User Group
Почему тогда такая конструкция не cработает?
val pow2: LazyList[Long] =
 0L #::
 1L #::
 LazyList(pow2.init.last * 2)
источник

Oℕ

Oleg ℕizhnik in Scala User Group
такая конструкция, скорее всего к  переполнению стека приведёт
источник