【问题标题】:erlang mnesia create table errorerlang mnesia创建表错误
【发布时间】:2014-06-06 12:24:30
【问题描述】:

我正在尝试从 Erlang shell 创建 mnesia 表。对于从 mnesia 帮助文档中复制的以下语法,我得到了错误和相同的错误。

mnesia:create_table(employee,
    [{attributes, record_info(fields, employee)}]).

得到错误

记录员工未定义

尝试了各种组合,得到同样的错误。 mnesia 已经开始了。

【问题讨论】:

  • 必须定义记录“员工”。你申报了吗?

标签: erlang mnesia


【解决方案1】:

您需要先定义记录employee,然后才能对其执行record_info。在 shell 中可以使用rr(FileName). 命令,它会找到文件中的所有记录定义并记住它们。在模块中,您可以直接在模块中定义记录,也可以包含包含记录定义的文件。

必须在 shell 中进行这种特殊处理的原因是记录纯粹是一种编译时特性,因此记录定义并不真正“存在”于任何地方。

编辑: 如果你想直接在 shell 中定义记录,那么你不能使用标准的-record(...). 语法。这仅在模块中有效。 Shell 将其视为对record/2 函数的调用。您需要使用rd shell 命令。你的情况会变成:

3> rd(employee, {emp_no, name, salary, sex, phone, room_no}).
employee
4> record_info(fields, employee).
[emp_no,name,salary,sex,phone,romm_no]
5> 

然后record_info 工作。如果您已经在文件中拥有记录定义,请改用 shell rr(File). 命令,因为它更容易。我想。

【讨论】:

  • 是的,我尝试使用'-record(employee,{emp_no,name,salary,sex,phone,room_no})定义记录。 ' 但我得到了响应'异常错误:未定义的 shell 命令记录/2'
【解决方案2】:

你可以试试 rd(employee, {emp_no, name, salary, sex, phone, room_no}). 在 erlang shell 中。

rd(RecordName, RecordDefinition) 在 shell 中定义一条记录。 RecordName 是一个原子,RecordDefinition 列出了字段名称和 默认值。通常记录定义被告知 shell 通过使用下面描述的 rr 命令,但有时它是 方便动态定义记录。

请看这个链接:http://www.erlang.org/doc/man/shell.html

【讨论】:

  • 感谢@BlackMamba。这行得通。您能否指出与此相关的任何文档?目前我指的是erlang.org/doc/apps/mnesia/Mnesia_chap2.html,我猜这是erlang mnesia的官方文档。
  • @RajanR.G 我已经修改了答案。
猜你喜欢
  • 2017-11-04
  • 2013-02-11
  • 2016-07-12
  • 1970-01-01
  • 2013-07-03
  • 2015-08-15
  • 2012-03-22
  • 2017-03-25
  • 2015-07-09
相关资源
最近更新 更多