在模块中定义 Erlang 记录

All*_*ate 0 erlang record

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

129> rd(person, {name=""}).
person
130> #person {}.
#person{name = []}
131> #person {name="dummy"}.
#person{name = "dummy"}
Run Code Online (Sandbox Code Playgroud)

但我不确定如何在模块中定义和使用记录。当我创建 my_module.erl 时:

-module(my_module).

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

#person {name="dummy"}.
Run Code Online (Sandbox Code Playgroud)

...并尝试编译,我得到:

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

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

rau*_*sch 5

如果你想在多个模块中使用一条记录,你可以将它放在头文件中(例如foo.hrl):

-record(foo, {bar, baz}).
Run Code Online (Sandbox Code Playgroud)

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

-include_lib("path/to/foo.hrl")
Run Code Online (Sandbox Code Playgroud)

通常这些头文件被放入include应用程序的目录中。

编辑:我引用文档

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

-include_lib("kernel/include/file.hrl").
Run Code Online (Sandbox Code Playgroud)

所以,看来我写的实际上适合include