Size: a a a

Scala User Group

2020 October 10

Oℕ

Oleg ℕizhnik in Scala User Group
В скале в общем коллекции делятся на LinearSeq и IndexedSeq, в первых длина и взятие по индексу линейное, во вторых логарифм/константа
источник

Oℕ

Oleg ℕizhnik in Scala User Group
В LazyList, если список бесконечный .length приводит бесконечному циклу
источник

В

Вагнер in Scala User Group
Oleg ℕizhnik
В скале в общем коллекции делятся на LinearSeq и IndexedSeq, в первых длина и взятие по индексу линейное, во вторых логарифм/константа
и Buffer ещё
и всякие смеси индексированных типов коллекций и связанных (например ArrayList, вроде)
и у них амортизированно константное время почти у всех операций
источник

R

RAFIZ in Scala User Group
Вагнер
и Buffer ещё
и всякие смеси индексированных типов коллекций и связанных (например ArrayList, вроде)
и у них амортизированно константное время почти у всех операций
поэтому и хотелось некую таблицу тупо иметь)чтобы находить свою коллекцию, метод и на их пересечении сложность (хотя бы для самых популярных опять же)
источник

Oℕ

Oleg ℕizhnik in Scala User Group
да иммутабельных не очень много
источник

Oℕ

Oleg ℕizhnik in Scala User Group
А мутабельные редко нужны
источник

Oℕ

Oleg ℕizhnik in Scala User Group
вектор лист лейзилист эррэйсек, вот и закончили
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
RAFIZ
поэтому и хотелось некую таблицу тупо иметь)чтобы находить свою коллекцию, метод и на их пересечении сложность (хотя бы для самых популярных опять же)
на скалаланга сайте есть такая
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
источник

R

RAFIZ in Scala User Group
Λнтон Войцишевский
на скалаланга сайте есть такая
ага. я про неё писал уже, там не все. .size, .length нету
https://t.me/scala_ru/292912
источник

А

Алексей in Scala User Group
подскажите начинающему, создал ZIO fromFunction
val zfun: URIO[Int, Int] = ZIO.fromFunction((i: Int) => i * i)
как ее собственно потом вызвать с параметром и получить результат?
источник

IL

Ivan Lopatin in Scala User Group
Алексей
подскажите начинающему, создал ZIO fromFunction
val zfun: URIO[Int, Int] = ZIO.fromFunction((i: Int) => i * i)
как ее собственно потом вызвать с параметром и получить результат?
zio.Runtime.default.unsafeRun(zfun.provide(2))
источник

А

Алексей in Scala User Group
Ivan Lopatin
zio.Runtime.default.unsafeRun(zfun.provide(2))
спасибо мил человек
источник

AS

Aleksei Shashev in Scala User Group
Всем привет, подскажите, как можно удобне решить следующее. Нужна сумма типов. Конкретнее, метод-обработчик HTTP запроса может вренуть один из возможных вариантов данных. Каждый вариант представленным своим типом (case class). Одни и те же типы могут возвращаться разными методами обработчиками. Из-за этого, чтобы можон было исопльзовать представление суммы типов через sealed trait нужно или кейс классы наследовать от несколкьих трейтов, а это выглядит странно в том числе семматически, так как в данные просачивается инородная информация вида, какой метод их возвращает/принимает. Другой вариант - создавать sealed trait и кейс классы обертки, которые будут заключать в себя исходные кейс классы, лучше, но обилие однообразного кода удручает.
Пока наиболее интересным выглядит Coproduct из Shapless. Но если конвертировать case  class в Coproduct содержащие этот тип и потом накинуть для этого Json кодер/енкодер понятно как, то как сделать обработку Coproduct элегантно у меня вызвало затруднение. Из идей собственно использовать петрн матчинг с Inl/Inr, в принципе это решает проблему + есть проверка компилятором на полноту матчинга, но выглядит немного криво:
  type Type = Foo :+: Bar :+: Qoo :+: CNil

 def handler1(g: Group): Unit = g match {
   case Inl(foo)            => ???
   case Inr(Inl(bar))       => ???
   case Inr(Inr(Inl(qoo)))  => ???
   case Inr(Inr(Inr(cnil))) => cnil.impossible
 }

Понимаю как сделать объекты с unapply, чтобы получилоcь что-то типа:

  def handler2(g: Group): Unit = {
   val GetFoo = GetElement[Foo]
   val GetBar = GetElement[Bar]
   val GetQoo = GetElement[Qoo]

   g match {
     case GetFoo(foo) => ???
     case GetBar(bar) => ???
     case GetQoo(qoo) => ???
   }
 }


или обощенного обработчика в который "добавляются" обработчики для конкретного типа:

  def handler3(g: Group): Unit = {
   val hnd = new HandlerBuilder[Unit]
     .add[Foo](_ => ())
     .add[Bar](_ => ())
     .add[Qoo](_ => ())
     .result()

   hnd(g)
 }

Но тут теряется проверка на полноту, то обработали все кейсы на этапе компиляции. Ну и еще вариант писать через Selector, который возращает Option.

Возможно есть какой-то более элегантный способ решить такую задачку, чтобы можно было легко и просто сделать сумму типов, а потом красиво обработать каждый отдельный случай. Желательно иметь еще при этом проверку полноты обработчиков на этапе компиляции?

Используемая версия скалы - 2.13.
источник

N

Nadia in Scala User Group
Подскажите начинающему дубль два. Я скала в универе изучаю, но очень хотелось бы параллельно какие-то материалы использовать. Буду рада рекомендациям)
источник

GP

Grigory Pomadchin in Scala User Group
Nadia
Подскажите начинающему дубль два. Я скала в универе изучаю, но очень хотелось бы параллельно какие-то материалы использовать. Буду рада рекомендациям)
есть еще чят https://t.me/scala_learn
источник

N

Nadia in Scala User Group
Спасибо
источник

D

Deλ✨ in Scala User Group
Nadia
Подскажите начинающему дубль два. Я скала в универе изучаю, но очень хотелось бы параллельно какие-то материалы использовать. Буду рада рекомендациям)
источник

GP

Grigory Pomadchin in Scala User Group
о точно я и забыл что это у нас в описании
источник

N

Nadia in Scala User Group
Спасибо большое. А что думаете насчёт курсов scala в udemy и coursera от EPFL? Кто-нибудь проходил?
источник