【发布时间】:2016-09-08 10:31:33
【问题描述】:
我在玩GenServer,但在实现自定义init 回调时遇到问题。
请考虑以下代码:
defmodule GenS do
use GenServer
def start_link(initial \\ 0) do
GenServer.start_link(__MODULE__, initial)
end
def init(initial) do
case initial do
3 -> {:stop, "Can't initialise with 3"}
_ -> {:ok, initial}
end
end
end
case GenS.start_link(3) do
{:error, reason} -> IO.puts "Failed with #{reason}"
{:ok, _} -> IO.puts "This has worked!"
end
IO.puts "I'm still alive!"
执行此代码时,我可以看到输出:
▶ elixir gens.ex
** (EXIT from #PID<0.46.0>) "Can't initialise with 3"
虽然我期望 成功 分支有类似的输出(当值不同于 3 作为参数传递时):
▶ elixir gens.ex
This has worked!
I'm still alive!
根据GenServer.start_link/3的文档:
如果
init/1回调因原因失败,此函数将返回{:error, reason}。否则,如果返回{:stop, reason}或:ignore,则终止进程,该函数分别返回{:error, reason}或:ignore。
我希望返回元组,我可以再次匹配,但似乎并非如此。你有什么建议吗?
【问题讨论】:
标签: elixir gen-server