Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使erlang在当前目录的子目录中查找模块?_Erlang - Fatal编程技术网

如何使erlang在当前目录的子目录中查找模块?

如何使erlang在当前目录的子目录中查找模块?,erlang,Erlang,我是Erlang的新手,刚刚学习了一些Erlang教程。来自TDD的背景,我认为我应该在Erlang中遵循一些TDD原则。我的代码组织如下 root |- tests | |- name_builder_tests.erl |- src | |- name_builder.erl 我在根目录下启动Erlang shell。但是我无法从那里编译我的erl文件,因此每次我更改其中一个文件并需要编译它们时,我必须切换到tests或src目录 在编译模块或执行特定模块中的函数时,我是否可以告诉

我是Erlang的新手,刚刚学习了一些Erlang教程。来自TDD的背景,我认为我应该在Erlang中遵循一些TDD原则。我的代码组织如下

root
|- tests
|   |- name_builder_tests.erl
|- src
|   |- name_builder.erl
我在
根目录下启动Erlang shell。但是我无法从那里编译我的
erl
文件,因此每次我更改其中一个文件并需要编译它们时,我必须切换到
tests
src
目录

在编译模块或执行特定模块中的函数时,我是否可以告诉shell在所有子目录中查找模块?我想问的是,如果我的shell位于
root
目录下,我能成功执行以下命令吗

c(name_builder).
c(name_builder_tests).

进行单元测试时的一种方法是将测试放在与生产代码相同的模块中:

-module(my_code).
-export([run/0]).

run() -> ok.

-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").

run_test() ->
    ?assertEqual(ok, run()).

-endif.
这样你就有了测试。 关于代码的可用性,您应该使用“-pa”参数运行erlang shell,并指定代码的位置:

erl -pa src/
这是因为在默认情况下,您正在编译的文件将与源文件放在同一文件夹中。 但我建议你使用像钢筋这样的东西,因为它会让你的生活更轻松

嗯,,
Alin

让我们像这样组织代码

root
|- test
|   |- name_builder_tests.erl
|- src
|   |- name_builder.erl
|- rebar
|- rebar.config
然后运行“/rebar compile eunit”。 您可以在此处找到的钢筋脚本和文档

您也可以使用来告诉编译器在哪里查找源文件

在根目录中创建一个名为Emakefile的文件,包含以下内容

{'src/*', [debug_info,
   {i, "src"},
   {i, "include"},     
   {outdir, "ebin"}]}.
{'test/*', [debug_info,
    {i, "src"},
    {i, "include"},
    {i, "test"},        
    {outdir, "ebin"}]}.
现在使用
erl-make
编译所有模块,这将把所有
.beam
文件放入
ebin/
目录中

然后通过运行命令
erl-pa ebin/
启动shell,该命令将ebin dir添加到sys路径

PS 1:我也是一个几乎是erlang新手的人,我从,更准确地说是从


PS 2:如果你正在开发一款比这更复杂的应用程序,我建议你检查一下

我读到的“将代码和测试放在一个模块中”的方法,但老实说,我不喜欢这种方法。我想将测试与生产代码混合是个坏主意。顺便问一下,什么是rebar?使用rebar的建议基本上只是一种使用。我想你会发现,使用函数式编程语言,将测试与生产代码混合使用更明智/更安全。您不必担心全局变量或私有对象方法。@macintux在阅读了包含/排除测试的代码后,我明白了您的观点,在Erlang world中,将测试和生产代码放在同一个文件中是可以接受的。但对于我的OO思想来说,它仍然感觉有点不干净。在经历了大量关于将测试代码与生产代码分离的麻烦之后,我放弃了。和钢筋一起去。它非常优雅。继续使用钢筋,但我喜欢
Emakefile
appraoch