2017-02-28 46 views
2

我刚刚开始学习灵药昨天。我有一个文件User.exs。它看起来像这样:Elixir - 模块没有与文档编译

defmodule User do 
    @moduledoc """ 
    Defines the user struct and functions to handle users. 
    """ 
    # functions and stuff go here... 

end 

当我运行iex,这是当我试着看的文档会发生什么:

iex(1)> c "user.exs" 
[User] 
iex(2)> h User 
User was not compiled with docs 

任何想法?

+0

将文件的扩展名更改为'.ex'。 – mudasobwa

+0

@mudasobwa问题依然存在,没有什么不同。 –

+0

通常,一个.exs不会被编译(这是一个脚本文件)。所以@ mudasobwa的建议是一个很好的建议。但如果你不使用混合文件,那么我建议你添加一个。 –

回答

5

c("user.exs")编译在存储器中的文件,并同时h/1目前需要(下面详细说明)的光束文件存在于磁盘工作不写字节码(.beam文件)到磁盘。您可以c存储生成的字节码在当前目录中,这将使h/1工作,c("user.exs", ".")

$ ls 
user.exs 
$ cat user.exs 
defmodule User do 
    @moduledoc """ 
    Defines the user struct and functions to handle users. 
    """ 
end 
$ iex 
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace] 

Interactive Elixir (1.4.2) - press Ctrl+C to exit (type h() ENTER for help) 
iex(1)> c("user.exs", ".") 
[User] 
iex(2)> h User 

             User 

Defines the user struct and functions to handle users. 

iex(3)> 
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded 
     (v)ersion (k)ill (D)b-tables (d)istribution 
^C 
$ ls 
Elixir.User.beam user.exs 

h/1依靠Code.get_docs/2获取该模块调用:code.get_object_code/1的文档。 :code.get_object_code/1根据its docs,“在代码路径中搜索模块模块的目标代码。如果成功则返回{Module, Binary, Filename},否则返回error。”

5

原因是*.exs文件是用于脚本编写的,它们不会被编译,*.ex文件将被elixir编译。

如果您没有混音项目和user.ex文件,请尝试elixirc user.ex,然后在此开始之后iexh User

如果你有一个混音项目,然后像命令行一样启动iex:iex -S mix 这将加载你的项目并编译所有*.ex文件。现在键入h User

我尝试了两种方法,我自己和两个工作。

参见:

+1

请注意,扩展名与'elixirc'无关。 'elixirc user.exs'也可以。 – Dogbert