2017-02-28 8 views
2

昨日エリクシルの学習を始めました。私はUser.exsファイルを持っています。それは次のようになります。エリクサー - モジュールがドキュメントでコンパイルされていません

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ファイル)を書き込みません。あなたはcc("user.exs", ".")h/1作業を行いますカレントディレクトリに生成されたバイトコードを保存することができます:

$ 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_object_code/1を呼び出してドキュメントを取得するためにCode.get_docs/2に依存しています。 :code.get_object_code/1its docs、 "モジュールモジュールのオブジェクトコードのコードパスを検索します。成功した場合は{Module, Binary, Filename}を返し、そうでない場合はerror"を返します。

5

なぜなら、*.exsファイルはスクリプト用であり、コンパイルされず、*.exファイルはエリクシールでコンパイルされるからです。

あなたがelixirc user.exを試してみて、このスタートiexとタイプh User後にのみ、その後何のミックスプロジェクトとuser.exファイルを持っていない場合。

プロジェクトがある場合は、コマンドラインからiexを起動してください。iex -S mix これにより、プロジェクトがロードされ、すべて*.exファイルがコンパイルされます。今すぐ入力してh User

私は自分で両方の方法を試しましたが、両方とも動作します。

も参照してください:

+1

拡張子は 'elixirc'では重要ではないことに注意してください。 'elixirc user.exs'も動作します。 – Dogbert

関連する問題