0
我有一个简单的项目,我已经开始通话测试。所以我做了:我在哪里可以将我的模块放入Elixir混合应用程序中?
mix new test
我得到了通常的目录树。在lib目录中,是test.ex.但是我想让test.ex使用一个名为Mystuff的模块,但我不知道把mystuff.ex放在哪里,因为我得到了一个编译错误。
这里是test.ex(测试/ lib目录):
defmodule Test do
use Mystuff
@moduledoc """
Documentation for Test.
"""
@doc """
Hello world.
## Examples
iex> Test.hello
:world
"""
def hello do
Mystuff.bye()
end
end
,这里是mystuff.ex我也包含在测试/ lib目录下:
defmodule Test.Mystuff do
def bye do
IO.puts "bye"
end
end
但是如果我运行从项目的主目录(测试)我得到“IEX -S组合”:
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
Compiling 3 files (.ex)
== Compilation error on file lib/test/mystuff.ex ==
** (CompileError) lib/test/mystuff.ex:1: cannot define module Test.Mystuff because it is currently being defined in lib/mystuff.ex:1
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
所以我会命名一些错误?使用错误的东西?把东西放在错误的目录中?
您正在定义两次'Test.MyStuff'模块。一旦在'lib/test/mystuff.ex'中,另一个在'lib/mystuff.ex'中。改变他们的名字之一,它应该编译。 – Sheharyar
删除重复模块后,您还想了解['import','alias','use'和'require']之间的区别(http://elixir-lang.org/getting-started /alias-require-and-import.html) –
_Sidenote:_测试将具有'.exs'扩展名以防止其自动编译。没有'ExUnit'本身和'doctest'宏,'ExUnit'测试是没有意义的。 – mudasobwa