2017-02-28 4 views
2

Ich habe gerade erst angefangen, Elixier zu lernen. Ich habe eine Datei User.exs. Es sieht wie folgt aus:Elixier - Modul wurde nicht mit Docs kompiliert

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

end 

Als ich iex laufen, das ist, was passiert, wenn ich versuche, die Dokumente zu sehen:

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

Irgendwelche Ideen?

+0

Ändern Sie die Erweiterung der Datei zu ".ex". – mudasobwa

+0

@mudasobwa Problem bleibt, nicht anders. –

+0

Normalerweise wird eine .exs nicht kompiliert (es ist eine Skriptdatei). So @ Mudasobwa Vorschlag ist ein guter. Aber wenn Sie keine Mix-Datei verwenden, würde ich vorschlagen, dass Sie eine hinzufügen. –

Antwort

5

c("user.exs") kompiliert die Datei im Speicher und schreibt nicht den Bytecode (.beam-Datei) auf der Festplatte während h/1 zur Zeit erfordert (Details siehe unten), um die Strahl-Datei vorhanden sein, auf der Festplatte zu arbeiten. Sie können c speichern die erzeugte Bytecode im aktuellen Verzeichnis machen, die h/1 Arbeit mit c("user.exs", ".") machen:

$ 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 setzt auf Code.get_docs/2 die Dokumentation zu holen, die :code.get_object_code/1 auf dem Modul aufruft. :code.get_object_code/1 nach its docs, "Durchsucht den Codepfad nach dem Objektcode des Moduls Module. Gibt {Module, Binary, Filename} zurück, wenn erfolgreich, andernfalls error."

5

Der Grund ist, dass *.exs Dateien sind für das Scripting und sie werden nicht kompiliert und *.ex Dateien werden von Elixir kompiliert werden.

Wenn Sie kein Mix-Projekt haben und die user.ex Datei nur dann elixirc user.ex versuchen und danach iex zu starten und h User eingeben.

Wenn Sie ein Mischprojekt haben, starten Sie iex wie folgt von der Befehlszeile: iex -S mix Dies lädt Ihr Projekt und kompiliert alle *.ex Dateien. Geben Sie jetzt h User ein.

Ich versuchte beide Wege von mir selbst und beide arbeiten. auch

Siehe:

+1

Beachten Sie, dass die Erweiterung mit 'elixirc' keine Rolle spielt. 'elixirc user.exs' funktioniert auch. – Dogbert

Verwandte Themen