1.0 实现看起来像这样。
defmodule Chat do
use GenServer
@derive [Access, Collectable]
defstruct [api: APIClient, chat_id: nil, clients: %{}]
def start_link(params), do: GenServer.start_link(__MODULE__, params)
def init(params) do
state = Enum.into(params, %__MODULE__{})
{:ok, state}
end
...
end
第一个问题是 Access 已被弃用,这是否意味着我必须在访问状态字段时更改点表示法?
第二个问题是,如果我不删除 @derive Collectable 我会收到此错误Collectable.Any is not available, cannot derive Collectable ...
。这params
是一个关键字列表,我想我可以将关键字列表转换为Map
withstate = Map.merge(%__MODULE__{}, Enum.into(params, %{}))
但感觉非常笨拙。