Size: a a a

2020 October 06

DF

Denis Fakhrtdinov in pro.elixir
Первое — не кейворд лист. Второе — оно.
источник

SM

Sergei Maximov in pro.elixir
Denis Fakhrtdinov
Это не кейворд лист.
А тебе по условиям задачи нужно 100% использовать keyword list?  Или просто очень хочется?
источник

DF

Denis Fakhrtdinov in pro.elixir
Если в конфиге под ключом лежит не кейворд лист, приложение не стартует.
источник

SM

Sergei Maximov in pro.elixir
Denis Fakhrtdinov
Первое — не кейворд лист. Второе — оно.
Первое — это лист, второе — тоже лист!
источник

AD

Anastasiya Dyachenko in pro.elixir
Sergei Maximov
Это атом, а не строка
я и не говорю что это строка, но может подойти
источник

AD

Anastasiya Dyachenko in pro.elixir
Denis Fakhrtdinov
Нет, нельзя.
ну это работает, если что
источник

RK

Roman Kolesnev in pro.elixir
Я думаю так сделано ради производительности. Сравнение атомов - O(1), сравнение строк может до O(N) жрать
источник

DF

Denis Fakhrtdinov in pro.elixir
Это критично для конфигов?
источник

DF

Denis Fakhrtdinov in pro.elixir
Или это экономия на спичках by design?
источник

SM

Sergei Maximov in pro.elixir
Denis Fakhrtdinov
Если в конфиге под ключом лежит не кейворд лист, приложение не стартует.
В каком конфиге? Если ты про config/*.exs, то оно в качестве значения принимает любой терм
источник

RK

Roman Kolesnev in pro.elixir
Если в рантайме постоянно читать из конфигов - то может импакт и существенный
источник

DF

Denis Fakhrtdinov in pro.elixir
Нет, не любой.
источник

DF

Denis Fakhrtdinov in pro.elixir
Sergei Maximov
В каком конфиге? Если ты про config/*.exs, то оно в качестве значения принимает любой терм
test it
источник

RK

Roman Kolesnev in pro.elixir
Действительно, а в чем проблема String.to_atom заюзать?
источник

DF

Denis Fakhrtdinov in pro.elixir
В том, что это атом, а не строка.
источник

SM

Sergei Maximov in pro.elixir
Только что запустил приложение с

config :myapp, :foo, [{"foo", 2}, {"bar", 3}]


Всё стартануло успешно, ЧЯДНТ?
источник

RK

Roman Kolesnev in pro.elixir
Тогда короткий ответ - нельзя.

Либо переводи и при чтении, и при загрузке в атомы - либо никак.

Другой компромисс - хранить свой кофиг как вложенный (сообщение выше)
источник

DF

Denis Fakhrtdinov in pro.elixir
Как это обкостылить мне понятно, я просто думал мне объяснят логику такого ограничения.
источник

RK

Roman Kolesnev in pro.elixir
Обычно сконвертировать в атомы не проблема (если это не user data - тогда можно за лимит атомов улететь).
источник

RK

Roman Kolesnev in pro.elixir
Логика - есть тип данных keyword list. Его по умолчанию используют как эффективный key-value store для небольших объемов данных. Чтобы было быстро используют атомы как ключи, если не иизменяет память - поиск в KW-list линейный.

У Map же нет ограничения на ключи, но и поск там то ли на хэш-таблицах, то ли на деревьях.
источник