Elixir 长生不老药管理器:无效\u子\u规范
我是长生不老药的新手,现在跟随JoséValim的帖子 当我遇到以下错误时,我很难让主管启动一个孩子: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
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
,昨天它对我有效。