gpt4 book ai didi

elixir - :ok init argument in Elixir's GenServer example?有什么意义

转载 作者:行者123 更新时间:2023-12-02 02:00:46 24 4
gpt4 key购买 nike

Elixir's intro to GenServer ,客户端 API 使用 :ok 参数启动服务器

def start_link(opts \\ []) do
GenServer.start_link(__MODULE__, :ok, opts)
end

服务器的 init 函数要求其参数为 :ok

def init(:ok) do
{:ok, HashDict.new}
end

传递和验证:ok有什么意义?如果我们省略这个并编写类似的内容,会有什么不同吗

def start_link(opts \\ []) do
GenServer.start_link(__MODULE__, nil, opts)
end

def init(_) do
{:ok, HashDict.new}
end

最佳答案

这里请务必记住,传递给 start_link 的第二个参数将成为 init 函数的参数。因为这是一个简单的例子,所以他们使用了像 :ok 这样的原子,并且可以用 nil 代替。您需要传递第二个参数,无论它是否为零。

所以回答你的问题,在这个例子中 :ok 可以替换为 nil。我认为他们使用 :ok 因为必须有一个参数,并且 :ok 看起来是一个不错的选择(只是一个偏好)

在其他情况下,您必须利用此信息来获取一些重要数据或进行模式匹配

defmodule ServerDrop do
use GenServer

defmodule State do
defstruct count: 0
end

def start_link do
GenServer.start_link(__MODULE__,:ok,[{:name,__MODULE__}])
#GenServer.start_link(__MODULE__,[],[{:name,__MODULE__}])
end

def init(:ok) do
{:ok,%State{count: 10}}
end

def init([]) do
{:ok,%State{}}
end

#Code left out for brevity

在其他情况下,您可能需要获取一些数据

def init(stash_pid) do
current_number = Stash.get_value stash_pid
{:ok,{current_number,stash_pid}}
end

关于elixir - :ok init argument in Elixir's GenServer example?有什么意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33662473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com