在模块中定义Erlang记录

时间:2013-02-03 21:11:17

标签: erlang record

我可以通过以下方式在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。

2 个答案:

答案 0 :(得分:4)

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

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

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

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

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

修改:我引用了documentation

  

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

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

所以,我写的似乎是include实际上更多为真。

答案 1 :(得分:3)

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

添加类似

的内容

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

然后您可以使用

查看Erlang shell的结果

my_module:test_record()