record_info и tuple_to_list возвращают один и тот же порядок ключей в Erlang? - PullRequest
1 голос
/ 27 июля 2011

Т.е., если у меня есть запись

-record(one, {frag, left}).
  • Будет ли record_info(fields, one) идти всегда вернуть [frag, left]?
  • Есть tl(tuple_to_list(#one{frag = "Frag", left = "Left"})) всегда будет ["Frag", "Left"]?

Это деталь реализации?Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 27 июля 2011

Краткий ответ: да, на момент написания статьи это будет работать. Лучший ответ таков: в будущем это может не сработать, и природа вопроса касается меня.

Безопасно использовать record_info/2, хотя полагаться на заказ может быть рискованно, и, честно говоря, я не могу вспомнить ситуацию, когда это имеет смысл, что подразумевает, что вы решаете проблему неправильно. Можете ли вы поделиться более подробной информацией о том, что именно вы пытаетесь достичь, чтобы мы могли помочь вам выбрать лучший метод? Может быть, все, что вам нужно, - это простое сопоставление с образцом.

Что касается примера с tuple_to_list/1, я приведу цитату из «Программирование Эрланга» Чезарини и Томпсона:

"... что бы вы ни делали, никогда, никогда не используйте представления кортежей записей в ваших программах. Если вы это сделаете, авторы этой книги откажутся от вас и отрицают какое-либо участие в оказании вам помощи в изучении Erlang."

Есть несколько веских причин, в том числе:

  1. Ваш код станет хрупким - если вы позже измените количество полей или их порядок, ваш код сломается.
  2. Нет гарантии, что внутреннее представление записей будет продолжать работать таким же образом в будущих версиях erlang.
1 голос
/ 28 июля 2011

Да, порядок всегда один и тот же, поскольку записи, представленные кортежами, для которых порядок является существенным свойством.Посмотрите также на мой другой ответ о записях с примерами: Синтаксическая ошибка при доступе к полю в записи

1 голос
/ 27 июля 2011

Да, в обоих случаях Erlang сохранит «первоначальный» порядок. И да, это реализация, так как она не упоминается конкретно в спецификации функций или документации, хотя вполне уверенно, что так и останется.

...