Elixir 简单长生不老药/混合物项目的问题

Elixir 简单长生不老药/混合物项目的问题,elixir,elixir-mix,Elixir,Elixir Mix,我正在学习长生不老药,并试图编写一个简单的长生不老药hello world示例,但我在“混合运行”时一直遇到这个错误 我做错了什么?这是我的代码减去mix.exs和其他非关键文件 defmodule Collector do use Application def start(_type, _args) do Collector.Supervisor.start_link end end 我只想在控制台中运行“mix run”时转储“Hello World”,我不知道

我正在学习长生不老药,并试图编写一个简单的长生不老药hello world示例,但我在“混合运行”时一直遇到这个错误

我做错了什么?这是我的代码减去mix.exs和其他非关键文件

defmodule Collector do
  use Application

  def start(_type, _args) do
    Collector.Supervisor.start_link
  end
end



我只想在控制台中运行“mix run”时转储“Hello World”,我不知道如何调用
run()
方法,也不知道在哪里调用该方法。谢谢你

如果你想构建一个命令行应用程序,也许会对你有所帮助

除此之外,监管者通常不用于运行一次性流程,而是用于启动诸如GenServer之类的工作程序,这些工作程序以后可以调用。例如,您可以:

defmodule Collector.Supervisor do
  # ...

  def init(:ok) do
    children = [
      worker(Collector.Sample, [])
    ]

    supervise(children, strategy: :one_for_one)
  end
end
然后将
Collector.Sample
实现为
GenServer

defmodule Collector.Sample do
  use GenServer

  # Client API

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

  def run do
    GenServer.call __MODULE__, :run
  end

  # GenServer callbacks

  def handle_call(:run, _from, state) do
    IO.puts "Hello World"
    {:reply, :ok, state}
  end
end
您可以使用
-e
标志直接从
mix run
调用run方法

mix run -e 'Collector.Sample.run'

你应该去掉问题的Erlang标签;这与Erlang无关。尝试iex-S混合,然后在iex中,做你的收集器。start@OnorioCatenacci非常感谢。谢谢你的指导和时间
defmodule Collector.Supervisor do
  # ...

  def init(:ok) do
    children = [
      worker(Collector.Sample, [])
    ]

    supervise(children, strategy: :one_for_one)
  end
end
defmodule Collector.Sample do
  use GenServer

  # Client API

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

  def run do
    GenServer.call __MODULE__, :run
  end

  # GenServer callbacks

  def handle_call(:run, _from, state) do
    IO.puts "Hello World"
    {:reply, :ok, state}
  end
end
mix run -e 'Collector.Sample.run'