2015-09-04 4 views
0

Я хочу сделать операцию над таблицей Mnesia по каждому атрибуту таблицы.списки: map() on mnesia: table_info (таблица, атрибуты)

Record = #table{attr1, attr2, attr3, attr4}, 

mnesia:table_info(Table, attributes) дает список атрибутов, являющихся атомами [attr1, attr2, attr3, attr4]

т.е.
lists:map(fun(X) -> Record#table.X end, mnesia:table_info(Table, attributes)) 

Я ожидаю выше функции, чтобы дать список значений. Но, я получаю ошибку

" * 1: syntax error before: X " 

Я уже определил структуру таблицы с помощью команды оболочки -rd(table, {}), а также использовали -rr(module) прочитать структуру записи

Что плохого в приведенном выше коде? ? Любой, альтернативный для обработки атрибутов таблицы с помощью модуля списков?

ответ

0

Вы не можете ссылаться на записи по имени во время выполнения. Это один из рекордных недостатков.

В во время выполнения записи только кортежей с первым элементом, именем записи, так

#table{attr1 = 1, attr2 = 2, attr3 = 3, attr4 = 4} =:= {table, 1, 2, 3, 4} 

Как вы можете видеть, все именование информации теряется.

Но вся ваша функция выглядит немного бесполезной. Если вы хотите получить все значения, вы можете использовать саму запись.