我可以通过以下方式在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。
答案 0 :(得分:4)
如果要在多个模块中使用记录,可以将其放在头文件中(例如foo.hrl
):
-record(foo, {bar, baz}).
然后,您可以在您需要的模块中包含头文件:
-include_lib("path/to/foo.hrl")
通常这些头文件被放入应用程序的include
目录中。
修改:我引用了documentation:
include_lib
与include
类似,但不应指出 绝对档案。相反,第一个路径组件(可能在之后 变量替换)被假定为应用程序的名称。 例如:-include_lib("kernel/include/file.hrl").
所以,我写的似乎是include
实际上更多为真。
答案 1 :(得分:3)
您已将其定义正确,但记录只能在函数内部使用(当它在模块内部时)。
添加类似
的内容 test_record() -> #person{name="dummy"}.
然后您可以使用
查看Erlang shell的结果 my_module:test_record()