【发布时间】:2017-03-05 03:37:37
【问题描述】:
我有一个简单的项目,我已经开始调用测试。所以我做了:
mix new test
我得到了通常的目录树。在lib目录下,是test.ex。但我希望 test.ex 使用一个名为 Mystuff 的模块,但我不知道将 mystuff.ex 放在哪里,因为我得到一个编译错误。
这里是 test.ex(在 test/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,我也包含在 test/lib 中:
defmodule Test.Mystuff do
def bye do
IO.puts "bye"
end
end
但是,如果我从项目的主目录(测试)运行“iex -S mix”,我会得到:
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。更改其中一个名称,它应该可以编译。 -
删除重复模块后,您还想了解
import,alias,useandrequire之间的区别 -
旁注: 测试应具有
.exs扩展名以防止其自动编译。没有ExUnit本身和doctest宏,ExUnit测试毫无意义。
标签: elixir