Структура dict
в Erlang не позволяет вам дать ему имя.И, наверное, бессмысленно иметь имя в dict
.dict
- это простой словарь ключ / значение, представление которого не определено.
Если у вас есть несколько словарей, на которые вы хотите сослаться, вероятно, будет хорошей идеей сохранить их в записи или вкортеж, чтобы «назвать» их.Вы не должны создавать имена переменных из параметров функции.
{my_dict, Dict}
#state{
my_dict = Dict
}
Предположим, вам нужно иметь имена словаря как d_mycustomname, вы можете написать что-то вроде:
atomize(Name) ->
list_to_atom("d_" ++ Name).
Как и другиереспонденты, я не уверен, что это именно то, что вы просили.Пожалуйста, переформулируйте свой вопрос, чтобы получить лучшие ответы.Мой ответ на данный момент - это просто догадки, основанные на алкоголе.
ПОСЛЕ ВАШЕГО ОБНОВЛЕНИЯ:
Относительно того, как вы добавляете значения в словарь, вам нужновозможно update
, а не store
операция.
enqueue(D, {_Id, Key, Value}) ->
Update = fun (Old) -> Old ++ [Value] end,
dict:update(Key, Update, [Value], D).
Это добавит ваше значение в "очередь".Если его еще нет, он создаст его.
Что касается имен с префиксами, вы можете хранить свои словари в проплисте:
enqueue(ListOfDicts, {Id, Key, Value}) ->
Name = "dict_" ++ Id,
case proplists:get_value(Name, ListOfDicts) of
undefined -> % No such a dict yet
[{Name, dict:new()}|ListOfDicts];
D ->
Update = fun (Old) -> Old ++ [Value] end,
NewD = dict:update(Key, Update, [Value], D),
lists:keyreplace(Name, 1, ListOfDicts, {Name, NewD})
end.
Я не тестировал код, это простоне дать вам представление о том, что я предлагаю.