Size: a a a

2018 November 09

ŹR

Źmićer Rubinštejn in pro.elixir
Евгений
а бывает так, что ты заранее не знаешь тип ключа? :) Ну это разве что абстрактный Map.get
Если нету названия заранее - как бы и шаблона нету. С философской точки зрения
источник

DS

Dmitry Shpagin in pro.elixir
Евгений
ну тогда с чтением первого варианта никаких проблем не должно возникать
но почему-то они есть

С Map.get ты знаешь, что дальше будешь работать с полученным значением, а вариант с паттерматчингом заставляет напрячь извилины и посмотреть, что же там происходит
источник

Е

Евгений in pro.elixir
Dmitry Shpagin
но почему-то они есть

С Map.get ты знаешь, что дальше будешь работать с полученным значением, а вариант с паттерматчингом заставляет напрячь извилины и посмотреть, что же там происходит
это индивидуально, у меня все легко и просто
источник

DS

Dmitry Shpagin in pro.elixir
это пока, лучше использовать стандартные инструменты
источник

Е

Евгений in pro.elixir
Dmitry Shpagin
это пока, лучше использовать стандартные инструменты
паттерн-матчинг -  это стандартный инструмент.
источник

DS

Dmitry Shpagin in pro.elixir
+ ты читаешь свой код, а зайди в чужой проект где так же будут придумывать решения, вместо использования очевидных - будет тяжело
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Евгений
паттерн-матчинг -  это стандартный инструмент.
Ещё раз - нету паттерна
источник

Е

Евгений in pro.elixir
А что делать если нужно проверить сразу два ключа?
def map case
 {^key1 => value1, ^key2 => value2} -> {value1, value2}
 _ -> {:error, :reason}
end
источник

DS

Dmitry Shpagin in pro.elixir
Евгений
паттерн-матчинг -  это стандартный инструмент.
Да, но и стандартный инструмент для получения значения по ключу из мапы - Map.get
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Евгений
Это выше уже объявили крохоборством :))
Ну, в конечном итоге да. Но использовать конструкцию языка вместо вызова функции всё равно часто бывает полезно. С list comprehensions - это даже где-то рекомендовалось. Но, к примеру:

    %{^size_key => size, ^type => acc} = result

У меня есть такой код в одной функции, я бы не стал бы его разбивать на два Map.get-а, потому что оптимизация может сделать так, что в будущем или уже сейчас - это будет работать быстрее(в зависимости от размера map-а), чем если бы я написал бы так:

  size = Map.get(result, size_key)
 acc = Map.get(result, type)


И читать проще
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Dmitry Shpagin
Да, но и стандартный инструмент для получения значения по ключу из мапы - Map.get
https://elixir-lang.org/getting-started/keywords-and-maps.html => "Elixir developers typically prefer to use the map.field syntax and pattern matching instead of the functions in the Map module when working with maps because they lead to an assertive style of programming." Вот тут есть хорошая цитата, рекомендация.
источник

Е

Евгений in pro.elixir
Dmitry Shpagin
Да, но и стандартный инструмент для получения значения по ключу из мапы - Map.get
Я использую мап-гет, только если мне нужно что-то достать, а в случае если ключ отсутствует то подставить некое дефолтное значение
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Вообще, чтобы понять - почему fn(key, %{key := value}) не работает, нужно понять что это лимитация в дизайне Erlang-а, там уже другая семантика по этому поводу. Поэтому даже, если бы Elixir хотел бы, чтобы оно работало по-другому - это сверхнетривиальная задача сделать это - потому что лимитация лежит в Erlang-е.
источник

Е

Евгений in pro.elixir
если я уверен, что ключ существует, то через паттерн-матчинг
источник

Е

Евгений in pro.elixir
Dmitry Russ (Aleksandrov)
Вообще, чтобы понять - почему fn(key, %{key := value}) не работает, нужно понять что это лимитация в дизайне Erlang-а, там уже другая семантика по этому поводу. Поэтому даже, если бы Elixir хотел бы, чтобы оно работало по-другому - это сверхнетривиальная задача сделать это - потому что лимитация лежит в Erlang-е.
изначально говорилось о fn(key, %{^key => value}) (с фиксацией переменной)
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Евгений
изначально говорилось о fn(key, %{^key => value}) (с фиксацией переменной)
Так оно так и работает
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
В чём тогда проблема?
источник

Е

Евгений in pro.elixir
Нет, не работает оно так
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Евгений
Нет, не работает оно так
Да, спутал
источник

Е

Евгений in pro.elixir
говорит, что переменной key не существует
источник