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}
如您所见,所有命名信息都丢失了。
但是你所有的功能看起来有点没用。如果你想得到所有的值,你可以使用记录本身。
我想在 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}
如您所见,所有命名信息都丢失了。
但是你所有的功能看起来有点没用。如果你想得到所有的值,你可以使用记录本身。