Elixir 简单长生不老药/混合物项目的问题
我正在学习长生不老药,并试图编写一个简单的长生不老药hello world示例,但我在“混合运行”时一直遇到这个错误 我做错了什么?这是我的代码减去mix.exs和其他非关键文件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”,我不知道
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'