include directive通常用于.erl文件顶部的.hrl文件。
但是,我想直接使用Erlang控制台中的include。
我正在尝试在模块中使用某些功能。我已经从控制台编译了erl文件。但是,如果没有访问hrl文件,我想要使用的函数就无法工作。
有什么建议吗?
答案 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)
我不知道为什么作者选择将它们作为宏来实现;这看起来很奇怪,但我确信他有他的理由。