Erlang:从控制台使用include?

时间:2010-09-17 19:00:07

标签: erlang module include

include directive通常用于.erl文件顶部的.hrl文件。

但是,我想直接使用Erlang控制台中的include。

我正在尝试在模块中使用某些功能。我已经从控制台编译了erl文件。但是,如果没有访问hrl文件,我想要使用的函数就无法工作。

有什么建议吗?

3 个答案:

答案 0 :(得分:9)

“但是,如果没有访问hrl文件,我想要使用的功能就无法使用。”

这不可能是真的,但是从这里我会猜测你想要访问hrl文件中你没有(通常)在shell中的记录。

如果您执行rr(MODULE),则会加载MODULE中定义的所有记录(包括MODULE所包含的包含文件中定义的记录)。

然后,您可以从shell中完成所需的一切。

(您可能想要进行测试的另一件事是将行-compile(export_all)添加到erl文件中。很丑,但有时候很适合测试。)

答案 1 :(得分:5)

您是否尝试过compile:file选项?您可以传递要包含的模块列表:

compile:file("myfile.erl", [{i, "/path/1/"}, {i, "/path/2/"}])

答案 2 :(得分:2)

jsonerl.hrl不包含任何函数是没有价值的。它包含宏。据我所知,宏是Erlang中仅编译时的构造。

使它们可用的最简单方法是自己创建一个.erl文件,它实际上声明了根据宏实现的函数。也许是这样的:

-module(jsonerl_helpers).
-include("jsonerl.hrl").

record_to_struct_f(RecordName, Record) ->
    ?record_to_struct(RecordName, Record).

...在编译之后,你可以调用:

jsonerl_helpers:record_to_struct_f(RecordName, Record)

我不知道为什么作者选择将它们作为宏来实现;这看起来很奇怪,但我确信他有他的理由。