2

我不完全确定如何在 Erlang 模块中定义 Erlang 函数。我收到以下错误:

11> invoke_record:invoke().
** exception error: undefined function erlang:rr/1

从这个简单的代码中,尝试调用rr(?MODULE).Beam 可执行文件中的 from 以“初始化”记录,这样就不需要每次都从 shell 调用它。

-module(invoke_record).
-export([invoke/0]).
-record(process, {pid,
                reference="",
                lifetime=0
                }).
invoke() ->
    erlang:rr(?MODULE).
4

4 回答 4

4

该命令rr("file.hrl").旨在仅在 shell 中用于调试目的。

正如其他用户在他们的答案中强调的那样,在您的 erlang 代码中导入 .hrl 文件中包含的记录(或函数)的正确方法在于使用 command -include("file.hrl')

一旦将.hrl文件包含在代码中(通常在基于 OTP 行为的模块中,这在-export(...)部分之后完成),您就可以毫无问题地引用 Erlang 记录(或函数)。

于 2013-03-09T14:26:54.173 回答
3

rr是一个shell命令。你不能使用它编译的代码。

http://www.erlang.org/doc/man/shell.html

于 2013-03-08T01:10:28.840 回答
3

如果您的意图是在 shell 中读取许多记录定义,为了方便调试,您可以编写一个包含所有需要的包含语句的文件,并在 shell 中简单地调用 rr 一次。

在 rec.hrl 中:

-include("include/bank.hrl").
-include("include/reply.hrl").

并在外壳中

1> rr("rec.hrl").
[account,reply]
2>

启动虚拟机时,我没有找到任何自动执行此操作的方法。

于 2013-03-08T12:40:55.787 回答
1

在处理项目时,您可以在纯文本文件中收集要用于该特定项目的所有必要的包含和其他命令行参数。制作纯文本文件后,您可以启动 shell:

erl -args_file FileName

其中 FileName 是纯文本文件的名称。请注意,erl 接受的所有命令行参数都是允许的。另请参阅ERTS 参考手册中的erl 标志

于 2016-04-20T14:46:56.300 回答