【问题标题】:Defining Erlang record in a module在模块中定义 Erlang 记录
【发布时间】:2013-01-18 14:21:58
【问题描述】:

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

【问题讨论】:

    标签: erlang record


    【解决方案1】:

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

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

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

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

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

    编辑:我引用documentation

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

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

    所以,对于include,看来我写的实际上更多是正确的。

    【讨论】:

      【解决方案2】:

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

      所以添加类似的东西

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

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

      my_module:test_record()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-08
        • 2012-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多