Это данные, которые должны быть неизменными в Эрланге, а не актеры.
Долгоживущие акторы обычно живут в хвостовой рекурсивной функции, аргументы которой служат своим состоянием и, безусловно, могут меняться между вызовами.
-module(cache).
-export([start/0, get_c/1, put_c/2, clear/1]).
start() -> register(spawn(fun () -> loop(dict:new()) end), cache).
loop(Dict) -> receive
{get, From, Key} -> From ! {cache_result, Key, dict:fetch(Key, Dict)};
{set, Key, Value} -> NewDict = dict:store(Key, Value, Dict),
loop(NewDict);
%% etc.
end
put_c(Key, Value) -> cache ! {set, Key, Value}
%% etc.
Когда вы вызываете put_c
, «состояние» актера изменяется, даже если все задействованные данные неизменны.