Хранение словаря в словаре на Erlang - PullRequest
2 голосов
/ 03 декабря 2010

У меня есть словарь, который я использую для хранения другого словаря, используя имя параметра.

Я получаю ошибку несоответствия справа.

вот мой код

handle_cast({setState, Id}, State) ->
Id0 = dict:new(), 
DQueue = queue:new(),
UQueue = queue:new(),
Id1 = dict:store(dQueue, [DQueue], Id0),
Id2 = dict:store(uQueue, [UQueue], Id1),
Id3 = dict:store(dSpeed, [], Id2),
Id4 = dict:store(uSpeed, [], Id3),
D = dict:store(Id, [Id4], State),
State = D,
{noreply, State};

Я не уверен, откуда возникла ошибка. Я думал, что это может быть потому, что я храню Id в качестве ключа в главном словаре с новым внутренним словарем в качестве значения.

Мне нужно, чтобы имя внутреннего словаря было значением Id, так как их будет много, и мне понадобится доступ к ним по Id позже.

Правильно ли я настраиваю словарь? Разрешает ли erlang словари хранить словари?

Спасибо

Ответы [ 2 ]

5 голосов
/ 03 декабря 2010

Не пытаясь использовать код, я готов поспорить, что вы ошибаетесь, когда делаете State = D, учитывая, что State уже связано в голове функции Кроме того, USpeed и DSpeed должны быть неопределенными, если вы неправильно скопировали / вставили свою функцию.

3 голосов
/ 03 декабря 2010

Как насчет переписать:

handle_cast({setState, Id}, State) ->
   D = dict:from_list([{dQueue, [queue:new()]},
                       {uQueue, [queue:new()]},
                       {dSpeed, []},
                       {uSpeed, []}],
   {noreply, D};

Что проще для чтения, позволяет избежать проблем с именами и примерно с той же скоростью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...