lists:map() 在 mnesia:table_info(table, 属性)

lists:map() on mnesia:table_info(table, attributes)

我想在 table 的每个属性上对 Mnesia table 进行操作。

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  "

我已经使用 shell 命令定义了 table 结构 -rd(table, {}) 也用过-rr(module) 读取记录结构

上面的代码有什么问题?? 使用列表模块处理 table 属性的任何替代方法??

您不能在运行时按名称引用记录项。这是创纪录的缺点之一。

在运行时记录只是元组,第一个元素是记录的名称,所以

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

如您所见,所有命名信息都丢失了。

但是你所有的功能看起来有点没用。如果你想得到所有的值,你可以使用记录本身。