将事件从 GenEvent 服务器转发到我在 elixir otp 中的进程

Forward events from a GenEvent server to my process in elixir otp

我有一个 GenEvent 服务器,我希望能够添加几个在我向主服务器发送事件通知时获取转发事件的进程。

我可以创建一个转发器模块并向其传递一个 pid 来发送消息,但由于它看起来一定是一种常见模式,我想知道是否有更好的方法。

GenEvent docs 中,处理程序的类型是

handler :: atom | {atom, term} | {pid, reference}

当我尝试将最后一种形式的处理程序添加到 GenEvent 服务器时,我总是遇到错误。

GenEvent.add_mon_handler(pid, {self, make_ref}, [])
{:error,
 {:badarg,
  [{:erlang, :apply, [#PID<0.59.0>, :init, [[]]], []},
   {GenEvent, :do_handler, 3, [file: 'lib/gen_event.ex', line: 990]},
   {GenEvent, :do_add_handler, 5, [file: 'lib/gen_event.ex', line: 947]},
   {GenEvent, :handle_msg, 5, [file: 'lib/gen_event.ex', line: 608]},
   {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 240]}]}}

elixir 文档中没有关于如何添加由 pid 和引用组成的处理程序的更多信息。 gen_event 的 erlang documentation 仅使用 atom{atom, term}.

形式的处理程序显示它

这是文档问题。函数 GenEvent.add_mon_handler/3 不再采用由 {pid, ref} 组成的处理程序。 https://groups.google.com/forum/#!topic/elixir-lang-talk/gyVce092C7I