对于我的生活,无法解决这个问题。我试图创建mnesia表,但不断发现这个奇怪的错误。
这是我的命令:
ok = mnesia:create_schema(Nodes),
rpc:multicall(Nodes, application, start, [mnesia]),
{_, ok} = mnesia:create_table(rr_events,
[{attributes, record_info(fields, rr_events)},
{index, [#rr_events.key]},
{disc_copies, Nodes}]),
rpc:multicall(Nodes, application, stop, [mnesia]).
这是我的记录:
-record(rr_events, {key, events=[]}).
这是错误:
=PROGRESS REPORT==== 24-Mar-2016::21:53:42 ===
application: mnesia
started_at: nonode@nohost
** exception error: no match of right hand side value
{aborted,{bad_type,rr_events,{index,[2]}}}
in function rr:install/1 (c:/Users/zzzz/Projects/zzz/zzz/rr/rr/_build/default/lib/rr/src/rr.erl, line 13)
知道这可能是什么吗?无法理解这一点。
答案 0 :(得分:2)
呼!感谢这个excellent blog post引导我回答,引用:
此错误:
{中止,{bad_type,wrud_record,{指数,[2]}}}
如果您使用记录的第一个元素来索引一个元素,则会发生表,如:
-record(wrud_record,{user,date,label,remark,url})。
和
mnesia:create_table(wrud_record,[{index,[user]},{attributes, record_info(fields,wrud_record)}])
,所以你应该把索引改成另一个元素,比如这里的备注:
mnesia:create_table(wrud_record,[{index,[remark]},{attributes, record_info(fields,wrud_record)}])
一切都会好的。 :)
答案 1 :(得分:2)
我最近遇到过这个问题。 Learn you some Erlang声明如下:
请注意,您不需要在记录的第一个字段上放置索引,因为默认情况下这样做。
如果您只需要对记录的第一个元素进行索引,那么我建议省略{index, [record_name]}
。
此外,虽然来自LYSE的段落暗示official Erlang documentation更进一步说明:
指数。这是一个属性名称或整数列表,用于指定Mnesia构建和维护额外索引表的元组位置。