如何修改Elixir中的现有模块行为?

时间:2016-05-26 11:08:36

标签: elixir phoenix-framework

是否可以为没有__using__/1功能的模块添加新功能?

例如,我想将get_meta_by_key函数添加到Phoenix.Tracker中。如果我一起去

defmodule MyApp.MyTracker do
  use Phoenix.Tracker

  def get_meta_by_key(..., topic, key)
    ...
  end

  handle_call(:get_meta_by_key, ..., state)
    ...
  end
end

然后我得到** (UndefinedFunctionError) undefined function Phoenix.Tracker.__using__/1

我想分发内存中的键值存储以保留一些临时值,但无法重新发明轮子并且不使用Phoenix.Tracker.list函数然后处理,无法弄清楚如何执行此操作呼叫方的完整列表。

我是Elixir / Phoenix的新手,所以如果我的问题很愚蠢,请原谅。

1 个答案:

答案 0 :(得分:1)

您可以使用using编写自己的宏。这是元编程相关的,我强烈建议您查看Metaprogramming Elixir的书。您还需要使用quoteunquote

您也可以参考this