我不完全确定如何在erl模块中定义erlang函数。我收到以下错误:
11> invoke_record:invoke().
** exception error: undefined function erlang:rr/1
从这个简单的代码中尝试从beam可执行文件中调用rr(?MODULE).
以便“初始化”记录,这样就不需要每次都从shell中调用它。
-module(invoke_record).
-export([invoke/0]).
-record(process, {pid,
reference="",
lifetime=0
}).
invoke() ->
erlang:rr(?MODULE).
答案 0 :(得分:3)
rr
是一个shell命令。你不能用它编译代码。
答案 1 :(得分:3)
如果您的目的是在shell中读取许多记录定义,为了便于调试,您可以编写一个包含所有必需include语句的文件,并在shell中调用一次rr。
在rec.hrl:
-include("include/bank.hrl").
-include("include/reply.hrl").
并在shell中
1> rr("rec.hrl").
[account,reply]
2>
启动虚拟机时,我没有找到任何自动执行此操作的方法。
答案 2 :(得分:3)
命令rr("file.hrl").
仅用于shell以进行调试。
正如其他用户在他们的回答中所强调的那样,在erlang代码中导入.hrl文件中包含的记录(或函数)的正确方法在于使用命令-include("file.hrl')
在代码中包含.hrl文件后(通常在基于OTP行为的模块中,这是在-export(...)
部分之后完成),您可以毫无问题地引用erlang记录(或函数) 。
答案 3 :(得分:0)
在处理项目时,您可以在纯文本文件中收集要用于该特定项目的所有必需包含和其他命令行参数。制作纯文本文件后,您可以启动shell:
erl -args_file FileName
其中FileName是纯文本文件的名称。请注意,允许erl接受的所有命令行参数。另请参阅the ERTS Reference Manual
中的erl标志