0

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

129> rd(person, {name=""}).
person
130> #person {}.
#person{name = []}
131> #person {name="dummy"}.
#person{name = "dummy"}

但我不确定如何在模块中定义和使用记录。当我创建 my_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

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

4

2 回答 2

5

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

-record(foo, {bar, baz}).

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

-include_lib("path/to/foo.hrl")

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

编辑:我从文档中引用:

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

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

所以,看来我写的其实适合include.

于 2013-02-06T14:03:48.493 回答
4

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

所以添加类似的东西

test_record() -> #person{name="dummy"}.

然后你可以看到 Erlang shell 的结果

my_module:test_record()

于 2013-02-03T21:37:24.277 回答