а через переменную? Типа такого:
Вместо:
my_function(atom1, atom2)
Писать:
A1 = atom1, A2 = atom2, my_function(A1, A2)
Что ломается, если сделать ровно так, как ты предложил?
Кажется, с record_info такое не прокатит, потому что она compile time. Видимо, надо другой вариант просто. А вообще задача была такая: динамически извлекать из рекорда элементы, имея на входе атом-имя.
ага. Простые гипотезы проще проверять самому (благо для компиляции и запуска нынче не нужно записываться в очередь к мейнфрейму за неделю), а в вопросе больше говорить о задаче/проблеме. Тебе нужен record_info(fields, my_record), и с ним либо вычисление номера поля, либо постоение проплиста/мапы
Ага, тоже подумал про вычисление номера
вижу три варианта: 1) использовать maps вместо рекордов; 2) использовать индексы вместо атомов; 3) использовать record_info fields
От рекордов уже не уйти, придется весь модуль для этого переписать. Буду дальше мучить record_info)
так говорите, будто у вас там 10 тысяч строк
Да нет, модуль маленький. Просто не вижу пока повода отказаться доделать на record_info.
всё правильно. нужно доделать, потом сделать второй вариант и написать бэнч
> maps вместо рекордов отличный путь к провалу в стиле «перепутал два стейта местами, и сломалось очень неявно через 5 запросов, два часа дебажил»
чё там мучить то, сделай поиск по чату R2M - однострочкик преобразования рекорда в мапу, из неё бери всё что хочешь по ключу
можно сделать такое: {:my_tag, map()} будет похоже на эликсировский struct, только лучше. И стейты не перепутаешь )
что в свою очередь будет совместимо с -record(my_tag, {fields = #{}}). А потом можно наиболее нужные в стектрейсе поля (id подключения, например) вынести в рекорд, чтобы быстрее искать глазами в стектрейсте
Обсуждают сегодня