Эликсир - модуль не был скомпилирован с документами

Я только начал изучать эликсир вчера. У меня есть файл 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

Есть идеи?

2 ответа

Решение

c("user.exs") компилирует файл в память и не записывает байт-код (файл.beam) на диск, пока h/1 в настоящее время (подробности ниже) файл луча должен присутствовать на диске для работы. Ты можешь сделать 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 в соответствии с его документацией"Ищет путь к коду для объектного кода модуля Module. Возвращает {Module, Binary, Filename} в случае успеха, в противном случае error".

Причина в том, что *.exs файлы для сценариев, и они не будут скомпилированы и *.ex файлы будут скомпилированы с помощью elixir.

Если у вас нет смешанного проекта и user.ex файл только потом попробуй elixirc user.ex и после этого начать iex и введите h User,

Если у вас есть смешанный проект, запустите iex, как в командной строке: iex -S mixЭто загрузит ваш проект и скомпилирует все *.ex файлы. Сейчас типа h User,

Я пробовал оба пути сам и оба работают.

Смотрите также:

Другие вопросы по тегам