我正在尝试从Erlang shell创建mnesia表。我从mnesia帮助文档复制了以下语法时出现错误和相同的错误。
mnesia:create_table(employee,
[{attributes, record_info(fields, employee)}]).
得到了错误
记录员工未定义
尝试了各种组合,得到同样的错误。 mnesia已经开始了。
答案 0 :(得分:5)
您需要先定义记录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).
命令,因为它更容易。我想。
答案 1 :(得分:2)
你可以试试
在erlang shell中rd(employee, {emp_no, name, salary, sex, phone, room_no}).
。
rd(RecordName,RecordDefinition)定义shell中的记录。 RecordName是一个原子,RecordDefinition列出了字段名称和 默认值。通常记录定义是已知的 shell使用下面描述的rr命令,但有时它是 方便快速定义记录。