首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我在这个主管和工作人员的设置中调用start链接时,为什么我会得到一个ProtocolUndefined错误?

当我在这个主管和工作人员的设置中调用start链接时,为什么我会得到一个ProtocolUndefined错误?
EN

Stack Overflow用户
提问于 2017-05-01 01:35:46
回答 1查看 104关注 0票数 1

在OTP应用程序中,我有以下简单的1级深度主管/工作人员设置。

如果启动"iex -S mix“并执行MyDemo.Supervisor.start_link({MyDemo.Worker,:start_link,[]}),则会得到以下错误输出。

( 1)为何会这样?似乎我在跟踪正确的函数签名。

代码

代码语言:javascript
复制
defmodule MyDemo.Supervisor do
  use Supervisor

  ### API
  def start_link({_, _, _} = mod_func_arg) do
    Supervisor.start_link(__MODULE__, mod_func_arg)
  end

  def init({mod, func, arg} = x) do
    opts_worker = [restart: :permanent, function: func]
    children = worker(mod, arg, opts_worker)
    #opts = [strategy: :simple_one_for_one, max_restarts: 5, max_seconds: 5]
    opts = [strategy: :one_for_one, max_restarts: 5, max_seconds: 5]
    supervise(children, opts)
  end
end


defmodule MyDemo.Worker do
  use GenServer

  def start_link(_) do
    GenServer.start_link(__MODULE__, :ok, [])
  end

  def stop(pid) do
    GenServer.call(pid, :stop)
  end

  def handle_call(:stop, _from, state) do
    {:stop, :normal, :ok, state}
  end
end

误差输出

** (退出#PID<0.255.0>)引发异常:** (Protocol.UndefinedError)协议枚举,不能用于{MyDemo.Worker,{MyDemo.Worker,:start_link,[]},:permanent,5000,:worker,MyDemo.Worker} (长生不老药) lib/enum.ex:1: Enumerable.impl_for!/1 (长生不老药) lib/enum.ex:116: Enumerable.Reach/3(长生不老药) lib/enum.ex:1776: Enum.map/2 (灵丹妙药) lib/supervisor/spec.ex:169: Supervisor.spec.Super.2 (stdlib) supervisor.erl:272::visor.init/1(stdlib) gen_server.erl:328::gen_server.init_it/6 (stdlib) proc_lib.erl:240::proc_lib.init_p_do_apply/3

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-01 02:41:10

试一试

代码语言:javascript
复制
children = [worker(mod, arg, opts_worker)]

supervise函数将列表作为其第一个参数。

在错误消息中

代码语言:javascript
复制
 (Protocol.UndefinedError) protocol Enumerable not implemented for {MyDemo.Worker, ...}

您可以看到两个元组,它是关键字键和值的条目。但是,它没有包装在[]中,因此这是输入未被指定为列表的后一步。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43713155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档