Size: a a a

2020 May 20

AR

Andrew Rudenko in pro.elixir
Andrew Rudenko
>  Functions as keys

а кстати, мб описаный кейс и решит
ужасно оно документировано и оч плохо работает...
источник

AR

Andrew Rudenko in pro.elixir
Andrew Rudenko
ужасно оно документировано и оч плохо работает...
нигде толком не написано что же эти кастомные лукаперы должны возвращать и какое поведение ожидается.
источник

AR

Andrew Rudenko in pro.elixir
при том что эти лукаперы должны быть разные для каждого типа операции
источник

AR

Andrew Rudenko in pro.elixir
вот я реализовал для get_in:


selector = fn f ->
     fn _, data, next ->
       data |> Enum.filter(f) |> Enum.map(next)
     end
   end

   data = %{items: [%{id: 2, count: 2}, %{id: 1, count: 3}, %{id: 2, count: 4}]}
   
   get_in(data, [:items, selector.(&(1 == &1[:id])), :count])
источник

AR

Andrew Rudenko in pro.elixir
но с update_in это уже не пройдет...
источник

AD

Anastasiya Dyachenko in pro.elixir
можешь объяснить текстом что этот код вообще должен делать? у меня подозрение что тут нужен Enum.map или Enum.reduce
источник

AR

Andrew Rudenko in pro.elixir
Lama Lover
Есть моя имплементация линз github.com/hissssst/pathex . По моим бенчам - это самое эффективное что есть
норм, но я так понимаю описаный кейс оно не сможет решить, так?
источник

AR

Andrew Rudenko in pro.elixir
еще понравилось "No Magic", у нас _всего лишь_ вот тут макрос, а еще вот это макрос. и вот тут еще один последний макрос 🙂
источник

AR

Andrew Rudenko in pro.elixir
Anastasiya Dyachenko
можешь объяснить текстом что этот код вообще должен делать? у меня подозрение что тут нужен Enum.map или Enum.reduce
я сверху объяснил текстом
источник

AR

Andrew Rudenko in pro.elixir
Andrew Rudenko
Я как новичек хотел бы начать с наивных вопросов, если можно 🙂

Есть ли в эликсир экосистеме какие-то либки для описания селектов / трансформаций данных?


Ну типа таких: найти в мапе ключ :items в нем элемент с id = 1 и инкрементнуть в нем поле count.
Иными словами альтернативу https://github.com/redplanetlabs/specter/ ?

С ним на кложе подобная трансформация описывается как-то так:

(->>
 {:items [{:id 2 :count 2}
          {:id 1 :count 3}
          {:id 1 :count 4}]}
 (sp/transform [:items (sp/filterer #(= 1 (:id %))) sp/FIRST :count] inc))


=>
{:items [{:id 2, :count 2} {:id 1, :count 4} {:id 1, :count 4}]}


Ну или мб какая-то имплементация линз?
.
источник

AB

Alex Bubnov in pro.elixir
composed_path = path1 ~> path2
господи, откуда эта чудовищная любовь к операторам вместо функций
источник

AD

Anastasiya Dyachenko in pro.elixir
сделать id ключом не вариант?
источник

AD

Anastasiya Dyachenko in pro.elixir
%{data | items: Map.new(data[:items], &{&1.id, &1})}
источник

AD

Anastasiya Dyachenko in pro.elixir
и дальше data[:items][1]
источник

AR

Andrew Rudenko in pro.elixir
Anastasiya Dyachenko
сделать id ключом не вариант?
да вариантов полно, но хотелось бы иметь нормальный декларативный язык запросов / трансформации иммутабельных данных, а я как новичек не знаю, может уже кто-то сделал, а я просто нагуглить не смог )
источник

AB

Alex Bubnov in pro.elixir
Andrew Rudenko
да вариантов полно, но хотелось бы иметь нормальный декларативный язык запросов / трансформации иммутабельных данных, а я как новичек не знаю, может уже кто-то сделал, а я просто нагуглить не смог )
я несколько сомневаюсь, в эликсире культура не совсем та.
источник

AD

Anastasiya Dyachenko in pro.elixir
Andrew Rudenko
да вариантов полно, но хотелось бы иметь нормальный декларативный язык запросов / трансформации иммутабельных данных, а я как новичек не знаю, может уже кто-то сделал, а я просто нагуглить не смог )
какую задачу это решает, мб есть другой способ, например данные по другому структурировать
источник

AR

Andrew Rudenko in pro.elixir
Anastasiya Dyachenko
какую задачу это решает, мб есть другой способ, например данные по другому структурировать
ну или писать на кложе, да ) иметь сложную структуру данных и хотеть делать по ним сложные выборки И модификации это нормально. а иммутабельность накладывает определенные требования на инструменты, т.к. методы из императивного мира больше не работают
источник

AR

Andrew Rudenko in pro.elixir
альтернатива сложным вложенным данным — это нормализация во что-то типа EAV, но там еще все сложнее, смотри datascript тонского
источник

AD

Anastasiya Dyachenko in pro.elixir
Andrew Rudenko
альтернатива сложным вложенным данным — это нормализация во что-то типа EAV, но там еще все сложнее, смотри datascript тонского
ну есть ets, mnesia
источник