r(module_name)没有在iex中重新加载@doc

时间:2017-03-26 18:56:44

标签: elixir reload iex

我在iex>中更新我的@doc测试它的外观。我遇到的问题是我必须退出iex才能查看更新的@doc文档。有没有办法在使用r()?

时重新加载模块@doc变量
iex -S mix 
iex> h Coordinate.island/1 
      ## Examples 
      iex> {:ok, coord } = Cordinate.start_link
         Cordinate.island(coord) 
         :falls_town

更新@doc以返回:none而不是:falls_town并保存文件。

iex> r(Coordinate) 
iex> h Coordinate.island/1 
   # issue: still showing the old @doc example 
   ## Examples 
   iex> {:ok, coord } = Cordinate.start_link
        Cordinate.island(coord) 
        :falls_town # should be :none 

1 个答案:

答案 0 :(得分:5)

h/1 currently loads the documentation from the compiled .beam filesr/1编译内存中的文件并且不会将.beam文件写入磁盘,这意味着h/1在您运行r/1时不会重新加载文档:

  

当我们在IEx中重新加载模块时,我们重新编译模块源代码,   在内存中更新其内容。磁盘中的原始.beam文件,   可能是模块的第一个定义来自的那个,   根本不会改变。

Source

您可以通过在recompile/0中运行iex(而不是r/1)来编译程序包并将生成的.beam文件写入磁盘。运行之后,您应该在h/1

中看到新文档