Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 长生不老药管理器:无效\u子\u规范_Elixir - Fatal编程技术网

Elixir 长生不老药管理器:无效\u子\u规范

Elixir 长生不老药管理器:无效\u子\u规范,elixir,Elixir,我是长生不老药的新手,现在跟随JoséValim的帖子 当我遇到以下错误时,我很难让主管启动一个孩子: iex(1)>Portal.shot(:橙色) {:错误,{:无效的子规范,[:orange]} 非常感谢您的帮助 这是门户模块 defmodule Portal do use Application def start(_type, _args) do import Supervisor.Spec, warn: false children = [ wor

我是长生不老药的新手,现在跟随JoséValim的帖子

当我遇到以下错误时,我很难让主管启动一个孩子:

iex(1)>Portal.shot(:橙色)
{:错误,{:无效的子规范,[:orange]}

非常感谢您的帮助

这是门户模块

defmodule Portal do
use Application

def start(_type, _args) do
    import Supervisor.Spec, warn: false

    children = [
        worker(Portal.Door, [])
    ]

    opts = [strategy: :simple_one_for_one, name: Portal.Supervisor]
    Supervisor.start_link(children, opts)
end

@doc """
Shoots a new door with the given `color`
"""
def shoot(color) do
    Supervisor.start_child(Portal.Supervisor, [color])
end
这是应该调用的Portal.Door模块和start_link函数

defmodule Portal.Door do

def start_link(color) do
    Agent.start_link(fn -> [] end, name: color)
end

也许你的混音版本是
1.4
。将
1.4
--sup
混合,在单个应用程序模块中自动包含start/2实现。在场景中,它位于
lib/portal/application.ex
中。您可以在那里修改start函数

我在那篇教程中遇到了同样的问题。如果您使用的是1.4之前的混合版本,则本教程是正确的。但是,在MIX1.4+中,主管代码应该放在lib/Portal/Application.ex中的Portal.Application模块中。下面是Github对这项更改的请求,并围绕更改背后的思想进行了一些讨论:

要解决此问题,您需要删除添加到门户模块的应用程序代码,并将其添加到lib/Portal/Application.ex中的Portal.Application模块。您的Portal.Application模块应如下所示:

defmodule Portal.Application do
  @moduledoc false

  use Application

  def start(_type, _args) do
    import Supervisor.Spec, warn: false

    children = [
      worker(Portal.Door, [])
    ]

    opts = [strategy: :simple_one_for_one, name: Portal.Supervisor]
    Supervisor.start_link(children, opts)
  end
end

你的代码对我有用。你确定这就是显示错误的代码吗?是的。这是我的编辑直接复制粘贴的。我确实在文件中有其他函数(也来自教程),但它们不应该有任何效果,因为它们没有被调用@Dogbert查看整个.ex文件会有帮助吗?是的。你能先把问题中的代码复制一下,加上2个缺少的
结尾
,看看它是否有效吗?我复制了这个,并添加了2个缺少的
end
,昨天它对我有效。