Size: a a a

2020 March 24

PG

Pïg Grëënëst in pro.elixir
что ты пытаешься сделать?
источник

AB

Alex Bubnov in pro.elixir
Vsevolod Avramov
|> Supervisor.which_children()
|> Enum.flat_map(fn({_, pid, _, _}) -> Supervisor.which_children(pid) end)
|> Enum.filter(fn({name, _, _, _}) -> name == MyCustomSupervisor end)

Вот у меня по поводу последнего и возник вопрос. Не очень выглядит fn({name, _, _, _}).
Задача - взять супервизор. У его детей-супервизоров взять только определённых поддетей по имени
тут, кстати, второй шаг очень небезопасный - в некоторых кругах считается нормальным ронять процесс, которому пришло на вход неизвестное сообщение.
источник

AB

Alex Bubnov in pro.elixir
а which_children - это как раз оно.
источник

VA

Vsevolod Avramov in pro.elixir
Alex Bubnov
тут, кстати, второй шаг очень небезопасный - в некоторых кругах считается нормальным ронять процесс, которому пришло на вход неизвестное сообщение.
Ты к тому, что pid может быть не от Супервизора? По архитектуре не может быть
источник

AB

Alex Bubnov in pro.elixir
да
источник

VA

Vsevolod Avramov in pro.elixir
Я думал над тем, чтобы добавить фильтрацию на :supervisor
источник

VA

Vsevolod Avramov in pro.elixir
Pïg Grëënëst
что ты пытаешься сделать?
Ну у меня есть супервизоры MyCustomSupervisor. И мне охота их всех взять. Можно регистри воспользоваться. Но там задача считай одноразовая - влом.
источник

LL

Lama Lover in pro.elixir
Vsevolod Avramov
|> Supervisor.which_children()
|> Enum.flat_map(fn({_, pid, _, _}) -> Supervisor.which_children(pid) end)
|> Enum.filter(fn({name, _, _, _}) -> name == MyCustomSupervisor end)

Вот у меня по поводу последнего и возник вопрос. Не очень выглядит fn({name, _, _, _}).
Задача - взять супервизор. У его детей-супервизоров взять только определённых поддетей по имени
|> Enum.filter(& match? {CustomSupervisor, _, _, _}, &1)
источник

VA

Vsevolod Avramov in pro.elixir
Lama Lover
|> Enum.filter(& match? {CustomSupervisor, _, _, _}, &1)
вах!
источник

VA

Vsevolod Avramov in pro.elixir
Lama Lover
|> Enum.filter(& match? {CustomSupervisor, _, _, _}, &1)
А почему пробел перед match?
источник

LL

Lama Lover in pro.elixir
Так и тут можно убрать скобочки fn(x) -> x + 2 end
Будет fn x -> x + 2 end
источник

LL

Lama Lover in pro.elixir
Vsevolod Avramov
А почему пробел перед match?
А почему бы и нет
источник

VA

Vsevolod Avramov in pro.elixir
Lama Lover
А почему бы и нет
Эмм-м-м-м.. Ща вот полезу в стайлгайд что выше скидывали и гляну как надо. Ну типа если язык разрешает разное форматирование, то это ещё не значит, что нужно писать по-разному
источник

LL

Lama Lover in pro.elixir
Vsevolod Avramov
Эмм-м-м-м.. Ща вот полезу в стайлгайд что выше скидывали и гляну как надо. Ну типа если язык разрешает разное форматирование, то это ещё не значит, что нужно писать по-разному
Ты странный
источник

VA

Vsevolod Avramov in pro.elixir
Lama Lover
Ты странный
Не не нашёл там.. Ну да ладно
источник

LL

Lama Lover in pro.elixir
Здесь есть кто-нибудь, кто пользовался Xandra ? Расскажете про свой опыт, ощущения?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Alex Bubnov
как раз нет, если у тебя в паттерне атомы - это уже existing atom
Логично
источник

AB

Alex Bubnov in pro.elixir
короче, я разобрался, как вытрясти из ecto SQL для запроса без подключения к базе, и это было как-то не особенно интуитивно
источник

AB

Alex Bubnov in pro.elixir
очень мешает тот момент, что реализация Inspect для Query полностью скрывает разницу между результатами, например,
Ecto.Query.Planner.plan(q, :all, Ecto.Adapters.Postgres)
и
Ecto.Adapter.Queryable.plan_query(:all, Ecto.Adapters.Postgres, q)
источник

AB

Alex Bubnov in pro.elixir
в итоге получается вот такое
alias Ecto.Query, as: Q
...
     # create query
     Q.from("left", as: :l)
     |> Q.join(:left, [l: le], r in "right", on: r.id == le.r_id, as: :r)
     |> Q.select([l: le, r: ri], {le.id, ri.id})
     # translate to sql
     |> (&Ecto.Adapter.Queryable.plan_query(:all, Ecto.Adapters.Postgres, &1)).() |> elem(0)
     |> Ecto.Adapters.Postgres.Connection.all()
     |> List.to_string
источник