2017-02-28 1 views
2

Je viens de commencer à apprendre l'élixir hier. J'ai un fichier User.exs. Il ressemble à ceci:Elixir - Module n'a pas été compilé avec docs

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

end 

Quand je lance iex, voici ce qui se passe lorsque je tente de voir les docs:

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

Des idées?

+0

Remplacez l'extension du fichier par '.ex'. – mudasobwa

+0

@mudasobwa Problème subsistant, pas différent. –

+0

Normalement, un fichier .exs n'est pas compilé (c'est un fichier de script). La suggestion de @ mudasobwa est donc bonne. Mais si vous n'utilisez pas un fichier de mixage, je vous suggère d'en ajouter un. –

Répondre

5

c("user.exs") Compile le fichier en mémoire et ne pas écrire le bytecode (fichier .beam) sur le disque en h/1 exige actuellement (détails ci-dessous), le fichier de faisceau d'être présent sur le disque pour fonctionner. Vous pouvez faire c stocker le bytecode généré dans le répertoire courant qui fera h/1 travail avec 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 repose sur Code.get_docs/2 pour aller chercher la documentation qui appelle :code.get_object_code/1 sur le module. :code.get_object_code/1 selon its docs, "Recherche le chemin de code pour le code objet du module module.Rend {Module, Binary, Filename} en cas de succès, sinon error."

5

La raison en est que les fichiers *.exs sont pour les scripts et ne seront pas compilés et les fichiers *.ex seront compilés par elixir.

Si vous avez pas de projet de mélange et le fichier user.ex n'essayez elixirc user.ex et après ce début iex et tapez h User.

Si vous avez un projet de mixage, démarrez iex de la façon suivante depuis la ligne de commande: iex -S mix Cela chargera votre projet et compilera tous les fichiers *.ex. Tapez maintenant h User.

J'ai essayé les deux façons par moi-même et les deux fonctionnent.

Voir aussi:

+1

Notez que l'extension n'a pas d'importance avec 'elixirc'. 'elixirc user.exs' fonctionne également. – Dogbert