Erlang 记忆写入失败

Erlang 记忆写入失败,erlang,mnesia,Erlang,Mnesia,我定义了一个名为log的记录。我想创建一个名为log\u table的mnesia表。当我尝试将记录写入表时,我得到bad\u type错误,如下所示: (node1@kitt)4> mnesia:create_table(log_table, [{ram_copies, [node()]}, {attributes, record_info(fields, log)}]). {atomic,o

我定义了一个名为
log
的记录。我想创建一个名为
log\u table
的mnesia表。当我尝试将记录写入表时,我得到
bad\u type
错误,如下所示:

(node1@kitt)4> mnesia:create_table(log_table, [{ram_copies, [node()]}, 
                                               {attributes, record_info(fields, log)}]).
{atomic,ok}

(node1@kitt)5> mnesia:dirty_write(log_table, #log{id="hebelek"}).
** exception exit: {aborted,{bad_type,#log{id = "hebelek"}}}
in function  mnesia:abort/1

我遗漏了什么?

您对日志记录的定义看起来如何?如果从头开始创建新表(即首先删除Mnesia@directory),是否会出现相同的错误。

我找到了它。当我更改
mnesia:create_table
调用此

mnesia:create_table(log_table, [{ram_copies, [node()]},
                                {record_name, log},
                                {attributes, record_info(fields, log)}]).

一切正常。

默认情况下,记录名假定与表名相同

要解决此问题,您应该将表命名为
log
,或者在表选项中添加选项
{record\u name,log}
(正如您在修复中所做的那样)

将记录和表命名为同一名称通常是一种好的做法,这样可以使代码更易于阅读和调试。然后还可以使用
mnesia:write/1
函数,将记录作为唯一参数。然后,Mnesia通过查看名称来确定将记录放在哪个表中