2017-02-28 45 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