0

我在 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 
4

1 回答 1

5

h/1当前从已编译的 .beam 文件中加载文档r/1编译内存中的文件并且不将 .beam 文件写入磁盘,这意味着h/1运行时不会重新加载文档r/1

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

资源

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

于 2017-03-26T20:40:17.930 回答