在模块中定义Erlang记录

在模块中定义Erlang记录,erlang,record,Erlang,Record,我可以通过以下方式在erl外壳上定义记录: 129> rd(person, {name=""}). person 130> #person {}. #person{name = []} 131> #person {name="dummy"}. #person{name = "dummy"} 但我不知道如何在模块中定义和使用记录。创建我的_module.erl时: -module(my_module). -record(person, {name, phone, addres

我可以通过以下方式在erl外壳上定义记录:

129> rd(person, {name=""}).
person
130> #person {}.
#person{name = []}
131> #person {name="dummy"}.
#person{name = "dummy"}
但我不知道如何在模块中定义和使用记录。创建我的_module.erl时:

-module(my_module).

-record(person, {name, phone, address}).

#person {name="dummy"}.
…并尝试编译,我得到:

132> c(my_module).          
my_module.erl:5: syntax error before: '#'
my_module.erl:3: Warning: record person is unused
error

文档中说,在shell中使用rd是因为记录在编译时可用,而不是在运行时可用。因此,我假设我不需要在模块定义中使用rd。

您已经正确定义了它,但是记录只能在函数中使用(当它在模块中时)

所以加上

test_record()->#person{name=“dummy”}。

然后,您可以使用


my\u module:test\u record()

如果要在多个模块中使用记录,可以将其放入头文件(例如
foo.hrl
):

然后,您可以将头文件包含在需要的模块中:

-include_lib("path/to/foo.hrl")
通常,这些头文件被放入应用程序的
include
目录中

编辑:我引自:

include_lib
类似于
include
,但不应指出 绝对文件。相反,第一个路径组件(可能在 变量替换)被假定为应用程序的名称。 例如:

-include_lib("kernel/include/file.hrl").
因此,我所写的似乎对
include
更为真实

-include_lib("kernel/include/file.hrl").