Size: a a a

2020 May 20

AR

Andrew Rudenko in pro.elixir
Andrew Rudenko
точно, помню что, что-то было, но не там смотрел. тем не менее, оно слишком тупенькое и вот например описаный кейс не решает. ничего кроме update_in нет из подобного?
>  Functions as keys

а кстати, мб описаный кейс и решит
источник

LL

Lama Lover 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}]}


Ну или мб какая-то имплементация линз?
Есть моя имплементация линз github.com/hissssst/pathex . По моим бенчам - это самое эффективное что есть
источник

LL

Lama Lover in pro.elixir
Есть ещё focus и дефолтные put_in, update_in и get_in
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Вот меня всегда интересовало, как путь отличает массив с индексом 0 от словаря с ключом 0
источник

LL

Lama Lover in pro.elixir
Źmićer Rubinštejn
Вот меня всегда интересовало, как путь отличает массив с индексом 0 от словаря с ключом 0
Там внутри паттерн-матчинг
Сначала сверяет со списком, потом с мапой
источник

LL

Lama Lover in pro.elixir
Причём со списком будет без List.index
источник

ŹR

Źmićer Rubinštejn in pro.elixir
А если пути не существует?
источник

LL

Lama Lover in pro.elixir
Źmićer Rubinštejn
А если пути не существует?
Тогда вернёт :error
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Вот я хочу запихнуть вглубь
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Например у меня сейчас на работе конкретный кейс - запихнуть в словарь по пути gender, cluster, category, и в category - массив, который я хочу append
источник

ŹR

Źmićer Rubinštejn in pro.elixir
И в самом начале вообще-то ничего не существует - есть только {}
источник

LL

Lama Lover in pro.elixir
Źmićer Rubinštejn
Например у меня сейчас на работе конкретный кейс - запихнуть в словарь по пути gender, cluster, category, и в category - массив, который я хочу append
Через update можно
p = path :gender / :cluster / :category

something = %{gender: %{cluster: %{category: []}}}
new_something = Pathex.over(p, something, & [:hello | &1]
)
источник

AB

Alex Bubnov in pro.elixir
Źmićer Rubinštejn
И в самом начале вообще-то ничего не существует - есть только {}
Ахахаха, я вот про это когда-то давно сильно подгорел про put_in. Который из коробки не умеет создавать пути, потому что map или kwlist.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Lama Lover
Через update можно
p = path :gender / :cluster / :category

something = %{gender: %{cluster: %{category: []}}}
new_something = Pathex.over(p, something, & [:hello | &1]
)
something = {}
источник

ŹR

Źmićer Rubinštejn in pro.elixir
А gender cluster category это переменные ))
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Типа male, x03, Bananas
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Короче приходится руками фигачить
источник

ŹR

Źmićer Rubinštejn in pro.elixir
В идеале нужен такой Путин, которому можно сказать что создавать если этого не существует
источник

ŹR

Źmićer Rubinštejn in pro.elixir
источник

LL

Lama Lover in pro.elixir
Źmićer Rubinštejn
А gender cluster category это переменные ))
Так и можно использовать переменные
источник